用Go解析xml,忽略嵌套元素?

时间:2015-03-29 10:09:20

标签: go xml-parsing

我正在尝试使用Golang xml解析器解析html文档。我已将其设置为提取所有<li>元素,但如果元素包含链接<a>,则忽略链接的内容。我想忽略嵌套的<a>并将其内容显示为纯文本,但我不知道如何。

这是我的代码:

d := xml.NewDecoder(resp.Body)
d.Strict = false
d.AutoClose = xml.HTMLAutoClose
d.Entity = xml.HTMLEntity

type list_item struct {
    Data string `xml:",chardata"`
}

for {
    t,_ := d.Token()
    if t == nil {
        break
    }

    switch se := t.(type) {
    case xml.StartElement:
        if se.Name.Local == "li" {
            var q list_item
            d.DecodeElement(&q, &se)

            c.Infof("%+v\n", q)

        }
    }
}

有没有办法忽略嵌套元素并显示其内容?

2 个答案:

答案 0 :(得分:1)

使用specialized package进行解析HTML的Conster。一般来说,HTML不是XML(XHTML 1.0是,但使用它格式化的文档并不常见,并且该标准已被弃用)。

我认为更好的方法 - 鉴于您的明显用例, - 将使用XPath使用查询提取必要的信息。

至于所述的问题,我认为没有内置的方法可以做你想要的事情:xml.Decoder实现了Skip()方法,但它只允许你跳过不需要的内容;什么都没有返回“内部XML”。您可以使用xml.Decoder的{​​{1}}自行滚动它:通过立即呈现它返回的内容,直到它返回表示您要查找的内容和结束元素为止(您必须实现对嵌套处理的支持)元件)。

答案 1 :(得分:0)

我找到了一个使用jQuery样式获取HTML信息的库:http://godoc.org/github.com/PuerkitoBio/goquery

我用过它并解决了这个问题。