我正在尝试使用 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)
}
}
}
有什么方法可以忽略嵌套元素并显示它们的内容吗?
最佳答案
Constder 使用 specialized package用于解析 HTML。一般来说,HTML 不是 XML(XHTML 1.0 是,但使用它格式化的文档不是很常见,而且该标准已被弃用)。
在我看来,一个更好的方法——给定你的明显用例——是使用 XPath使用查询提取必要的信息。
至于所陈述的问题,我认为没有内置的方法可以做你想做的事:xml.Decoder
实现了 Skip()
方法,但是它只允许您跳过不需要的内容;没有任何东西按原样返回“内部 XML”。您可以使用 xml.Decoder
的 RawToken()
自己滚动它:通过立即渲染它返回的任何内容,直到它返回一些表示您正在寻找的结束元素(您必须实现对处理嵌套元素的支持)。
关于go - 使用 Go 解析 xml,忽略嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327863/