XML Unmarshal 被并行标签绊倒
XML Unmarshal getting tripped up by parallel tag
我正在开发一个 RSS reader 应用程序,运行 解决纽约时报 RSS 提要的问题。我已将问题缩小为以下 XML(省略不必要的字段):
<item>
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss"/>
<pubDate>Mon, 25 Sep 2017 13:36:07 GMT</pubDate>
</item>
我正在尝试将其解析为以下结构:
type item struct {
Link string `xml:"link"`
PubDate string `xml:"pubDate"`
}
解析时,Link 字段为空白。但是,通过删除 atom:link 字段,它可以正常工作。我认为标签名称的相似性使解析器感到困惑。我有一个演示问题的 go playground,删除该行可以解决问题:https://play.golang.org/p/fUbLhSbo5K
我该如何解决这个问题?特殊情况下它不太可行,因为可能还有其他提要也这样做。
这是 Go 的 encoding/xml
包中长期存在的 documentation bug。基本上,当您不指定命名空间时,该字段将匹配 any 命名空间而不是 no 命名空间。事实上,在没有命名空间的情况下,没有办法让一个字段匹配only。如果您的 XML 有命名空间,解决方案是显式设置它:
<item xmlns="foo">
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&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"`
}
游乐场:https://play.golang.org/p/L9WOhixTKa.
如果您的 link
元素明确 没有 命名空间,您可能必须推出自己的 UnmarshalXML
方法。
我正在开发一个 RSS reader 应用程序,运行 解决纽约时报 RSS 提要的问题。我已将问题缩小为以下 XML(省略不必要的字段):
<item>
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss"/>
<pubDate>Mon, 25 Sep 2017 13:36:07 GMT</pubDate>
</item>
我正在尝试将其解析为以下结构:
type item struct {
Link string `xml:"link"`
PubDate string `xml:"pubDate"`
}
解析时,Link 字段为空白。但是,通过删除 atom:link 字段,它可以正常工作。我认为标签名称的相似性使解析器感到困惑。我有一个演示问题的 go playground,删除该行可以解决问题:https://play.golang.org/p/fUbLhSbo5K 我该如何解决这个问题?特殊情况下它不太可行,因为可能还有其他提要也这样做。
这是 Go 的 encoding/xml
包中长期存在的 documentation bug。基本上,当您不指定命名空间时,该字段将匹配 any 命名空间而不是 no 命名空间。事实上,在没有命名空间的情况下,没有办法让一个字段匹配only。如果您的 XML 有命名空间,解决方案是显式设置它:
<item xmlns="foo">
<link>https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&emc=rss</link>
<atom:link rel="standout" href="https://www.nytimes.com/2017/09/25/briefing/nfl-angela-merkel-iraqi-kurdistan.html?partner=rss&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"`
}
游乐场:https://play.golang.org/p/L9WOhixTKa.
如果您的 link
元素明确 没有 命名空间,您可能必须推出自己的 UnmarshalXML
方法。