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

我正在尝试使用 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)


        }

    }

}

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


梵蒂冈之花
浏览 240回答 2
2回答

绝地无双

Constder 使用专门的包来解析 HTML。通常,HTML 不是 XML(XHTML 1.0 是,但使用它格式化的文档并不常见,该标准已被弃用)。在我看来,一个更好的方法(考虑到您的明显用例)是使用XPath通过查询来提取必要的信息。至于所述的问题,我认为没有内置的方法可以做你想做的事:xml.Decoder实现Skip()方法但它只允许你跳过不需要的内容;没有任何东西按原样返回“内部 XML”。您可以通过使用xml.Decoder's自己滚动它RawToken():通过立即呈现它返回的任何内容,直到它返回您正在寻找的表示和结束元素的内容(您必须实现对处理嵌套元素的支持)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go