我正在尝试处理一个HTML文档。事情是golang.org/x/net/html
的{{1}}返回Parse
*html.Node
值,nil
也是零,这有点奇怪,因为如果事情不是正确地由err
处理,我应该收到错误!
这是我的代码:
Parse
package main
import (
"bytes"
"golang.org/x/net/html"
"io/ioutil"
"log"
)
func main() {
html, err := ioutil.ReadFile("html/simple_01.html")
if e != nil {
fmt.Fatal(e)
}
doc, err := html.Parse(bytes.NewReader(html))
if err != nil {
log.Fatal(err)
}
// locate <body>
var body *html.Node
for s := doc.NextSibling; s != nil; s = s.NextSibling {
if s.Data == "body" {
body = s
break
}
}
log.Println(body)
}
打印log.Println(body)
。同时打印nil
打印doc
,这很奇怪。
这是我正在测试的HTML文档
nil
我做错了什么?
答案 0 :(得分:2)
您的代码示例中有几个拼写错误,但主要问题是,您正在尝试获取根节点的下一个兄弟节点。您首先需要访问html标记,然后从那里开始到第一个孩子,然后遍历其兄弟姐妹:
package main
import (
"bytes"
"golang.org/x/net/html"
"io/ioutil"
"log"
)
func main() {
htmlfile, err := ioutil.ReadFile("html/simple_01.html")
if err != nil {
log.Fatal(err)
}
doc, err := html.Parse(bytes.NewReader(htmlfile))
if err != nil {
log.Fatal(err)
}
var htmlTag = doc.FirstChild.NextSibling
var body *html.Node
for s := htmlTag.FirstChild; s != nil; s = s.NextSibling {
if s.Data == "body" {
body = s
break
}
}
log.Println(body)
}