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

标签 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)

        }
    }
}

有什么方法可以忽略嵌套元素并显示它们的内容吗?

最佳答案

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

在我看来,一个更好的方法——给定你的明显用例——是使用 XPath使用查询提取必要的信息。

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

关于go - 使用 Go 解析 xml,忽略嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327863/

相关文章:

java - 使用 VTD-XML 优化解析 XML 文件的速度

xml - 用 asp 解析 svg xml

go - 解析嵌套的 JSON 字符串

json - 使用模块 "out of memory"将大型 XML 转换为 JSON 时,Nodejs 返回 "xml2json"

c++ - XMLString::transcode 的用途

go - 指针接收器困惑

java - 使用 Jersey 在 Java RESTful Web 服务中生成 JSON 和 XML 响应

multithreading - 如何在管道中同步 goroutines

go - PowerPC 版本的 Go

string - 在golang中,为什么 `a := []int32("hello")` work but not ` a := []int ("hello")`?