英文:
How to print text between css selectors in golang using html package?
问题
我有一个HTML文档:
<value>1,2,3</value>
<value>,1,3,5</value>
我想使用下面的代码提取文本,但它只打印出'value'标签(CSS选择器)。如何使用Golang的html包打印标签之间的文本而不是标签本身?
z := html.NewTokenizer(b)
for {
tt := z.Next()
switch {
case tt == html.ErrorToken:
return
case tt == html.StartTagToken:
t := z.Token()
isAnchor := t.Data == "value"
if isAnchor {
fmt.Println(t.Data)
}
}
}
英文:
I have html document
<value>1,2,3</value>
<value>,1,3,5</value>
and what to extract text with code below but it only prints 'value' tags (css selectors). How to print the text from between tags instead using golang html package ?
z := html.NewTokenizer(b)
for {
tt := z.Next()
switch {
case tt == html.ErrorToken:
return
case tt == html.StartTagToken:
t := z.Token()
isAnchor := t.Data == "value"
if isAnchor {
fmt.Println(t.Data)
}
}
}
答案1
得分: 4
这对我来说似乎有效:
r := strings.NewReader("<value>1,2,3</value><value>,1,3,5</value>")
doc, err := html.Parse(r)
if err != nil {
log.Fatal(err)
}
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "value" {
fmt.Println(n.FirstChild.Data)
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
我认为关键是在找到"value"节点后获取FirstChild。
英文:
This seems to work for me:
r := strings.NewReader("<value>1,2,3</value><value>,1,3,5</value>")
doc, err := html.Parse(r)
if err != nil {
log.Fatal(err)
}
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "value" {
fmt.Println(n.FirstChild.Data)
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
I think the key is grabbing the FirstChild after finding the "value" node.
答案2
得分: 1
你必须在下一个Token
上使用Text()
方法。
如果isAnchor := t.Data == "value"; isAnchor {
z.Next()
fmt.Println(z.Text())
}
英文:
You have to use Text()
method on the next Token
.
if isAnchor := t.Data == "value"; isAnchor {
z.Next()
fmt.Println(z.Text())
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论