为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
梵蒂冈之花 2021-09-27 14:25:07
我正在尝试使用 Golang xml 解析器解析 html 文档。我已经设法提取所有<li>元素,但如果元素包含链接<a>,则链接的内容将被忽略。我只想忽略嵌套<a>并将其内容显示为纯文本,但我不知道如何。这是我的代码:d := xml.NewDecoder(resp.Body)d.Strict = falsed.AutoClose = xml.HTMLAutoClosed.Entity = xml.HTMLEntitytype 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 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

Constder 使用专门的包来解析 HTML。通常,HTML 不是 XML(XHTML 1.0 是,但使用它格式化的文档并不常见,该标准已被弃用)。

在我看来,一个更好的方法(考虑到您的明显用例)是使用XPath通过查询来提取必要的信息。

至于所述的问题,我认为没有内置的方法可以做你想做的事:xml.Decoder实现Skip()方法但它只允许你跳过不需要的内容;没有任何东西按原样返回“内部 XML”。您可以通过使用xml.Decoder's自己滚动它RawToken():通过立即呈现它返回的任何内容,直到它返回您正在寻找的表示和结束元素的内容(您必须实现对处理嵌套元素的支持)。


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信