我正在尝试使用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)
}
}
}
有没有办法忽略嵌套元素并显示其内容?
答案 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
我用过它并解决了这个问题。