gpt4 book ai didi

XML Unmarshal 被并行标签绊倒

转载 作者:IT王子 更新时间:2023-10-29 01:41:19 27 4
gpt4 key购买 nike

我正在开发一个 RSS 阅读器应用程序,遇到了纽约时报 RSS 提要的问题。我已将问题缩小到以下 XML(省略了不必要的字段):

<item>
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&amp;emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&amp;emc=rss"/>
<pubDate>Mon, 25 Sep 2017 13:36:07 GMT</pubDate>
</item>

我正在尝试将其解析为以下结构:

type item struct {
Link string `xml:"link"`
PubDate string `xml:"pubDate"`
}

解析时,链接字段为空。但是,通过删除 atom:link 字段,它可以正常工作。我认为标签名称的相似性使解析器感到困惑。我有一个演示该问题的 go playground,删除该行可修复该问题:https://play.golang.org/p/fUbLhSbo5K我该如何解决这个问题?对它进行特殊处理并不可行,因为可能还有其他提要也这样做。

最佳答案

这是一个长期的documentation bug在 Go 的 encoding/xml 包中。基本上,当您不指定命名空间时,该字段将匹配任何 命名空间而不是没有 命名空间。事实上,在没有命名空间的情况下,没有办法匹配一个字段。如果您的 XML 有命名空间,解决方案是显式设置它:

<item xmlns="foo">
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&amp;emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&amp;emc=rss"/>
<pubDate>Mon, 25 Sep 2017 13:36:07 GMT</pubDate>
</item>

type item struct {
Link string `xml:"foo link"`
PubDate string `xml:"pubDate"`
}

Playground :https://play.golang.org/p/L9WOhixTKa .

如果您的 link 元素显式没有有命名空间,您可能必须推出自己的 UnmarshalXML 方法。

关于XML Unmarshal 被并行标签绊倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46423540/

27 4 0