<div> <dl> <dt> <ul> <li>男</li> </ul> </dt> <dd>太郎</dd> <dt> <ul> <li>男</li> <li>man</li> </ul> </dt> <dd>次郎</dd> <dt> <ul> <li>女</li> </ul> </dt> <dd>花子</dd> </dl> </div>
all_human := [][]string{} doc.Find("div > dl").Each(func(index int, selection *goquery.Selection) { gender := selection.Find("dt > ul").Nodes name := selection.Find("dd").Nodes for i := 0; i < len(name); i++ { if gender[i].FirstChild.NextSibling.NextSibling.FirstChild.Data != "" { all_human = append(all_human, []string{gender[i].FirstChild.NextSibling.FirstChild.Data + gender[i].FirstChild.NextSibling.NextSibling.FirstChild.Data, name[i].FirstChild.Data}) }else{ all_human = append(all_human, []string{gender[i].FirstChild.NextSibling.FirstChild.Data, name[i].FirstChild.Data}) } } }) fmt.Println(all_human)
[["男","太郎"],["男man","次郎"],["女","花子"]]のようにしたいのですがどのようにすれば良いのでしょうか?
上記のようなif文ですとinvalid memory address or nil pointer dereferenceとなってしまいうまくできません。
また、https://godoc.org/github.com/grengojbo/goquery/exp/html#Node
を見てもフィールドや関数の種類がないのでできないのかもしれないのですが<ul>タグ以下の文字をまとめて取得のようにする簡単な方法はあるのでしょうか?
FirstChild.NextSibling.NextSibling.FirstChild.Dataのように長くなってしまう事を可能であれば避けたいです。
github.com/grengojbo/goquery latest release v0.3.2 にはexp/htmlパッケージがありません。
再現しにくくて回答が難しいです。
experimentalなフィーチャーに関して回答が欲しい場合は
experimentalなパッケージインストールにつかった手順、Goのバージョンなども示してください。
情報不足で大変申し訳ございませんでした。goは1.13.8になります
go get github.com/PuerkitoBio/goquery
でgoqueryをインストールしselection *goquery.SelectionにNodesを使ってみると普通に使えたため、標準で使える仕様になっているのかなと思っていました
自分の実験のファイル でimportをしているものは
"fmt"
"github.com/PuerkitoBio/goquery"
"math/rand"
"net/http"
"net/url"
"strings"
"time"
"unicode"
になります
回答1件
あなたの回答
tips
プレビュー