net / html解析文档,无论如何返回nil * html.Node

时间:2016-04-07 05:10:39

标签: html parsing go

我正在尝试处理一个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

我做错了什么?

1 个答案:

答案 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)
}