2017-09-26 6 views
2

によってトリップされましたRSSリーダーアプリケーションで作業しており、The New York TimesのRSSフィードに関する問題が発生しています。私は次のような構造にそれを解析しようとしているXML Unmarshalがパラレルタグ

<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"` 
} 

解析された場合は、リンク・フィールドがある私は、次のXML(不要なフィールドは省略)までの問題を狭めてきましたブランク。しかし、atom:linkフィールドを削除することでうまく動作します。私は、タグ名の類似性がパーサーを混乱させていると思います。私は問題を示す遊び場を持っており、その行を削除するとそれが修正されます:https://play.golang.org/p/fUbLhSbo5K どうすればこの問題を回避できますか?これを行う他のフィードも存在する可能性があるため、特別なケースは実際には実現できません。

答えて

2

これは、Go's encoding/xmlパッケージで長年のdocumentation bugです。基本的に、名前空間を指定しないと、フィールドはの代わりに名前空間と一致し、名前空間と一致します。実際には、名前空間がない場合にフィールド一致をにする方法はありません。

<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"` 
} 

遊び場::https://play.golang.org/p/L9WOhixTKaあなたのXML名前空間を持っている場合は、解決策を明示的に設定することです。

あなたlink要素を明示的は、名前空間を持っていない場合は、おそらくあなた自身のUnmarshalXML方法を展開する必要があります。

関連する問題