1

私はこのようにいくつかのクラス内のメソッドを呼び出します:

GetResult(XElement item, XNamespace ns) {
    item.Element(ns + "title").Value;
}

フィードを初期化し、上記のように要素にアクセスするために、デフォルトの名前空間を見つけたいと思います。名前空間宣言がなくても正常に機能し(item.Element( "title")。Value)、要素の値が返されます。

では、どうすれば正しい名前空間を見つけることができますか?メソッドroot.GetDefaultNamespace()の結果はどういうわけか空です...

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
    <channel>...</channel>
</rss>

//編集

さて、これまでの私のコード:

    XDocument thisFeed = XDocument.Load(@"http://www.spiegel.de/schlagzeilen/tops/index.rss");
    XElement root = thisFeed.Root;
    XNamespace ns = root.GetNamespaceOfPrefix("content");
    //result:
    Console.WriteLine("DefaultNamespace: " + root.GetDefaultNamespace());
    //result: http://purl.org/rss/1.0/modules/content/
    Console.WriteLine("GetNamespaceOfPrefix('content'): " + ns);
    //works
    Console.WriteLine("Result: " + root.Element("channel").Element("title").Value);
    //Doesn't work
    Console.WriteLine("Result: " + root.Element(ns + "channel").Element(ns + "title").Value);
4

1 に答える 1

0

このようにしてみてください:

XNamespace ns = doc.Root.GetNamespaceOfPrefix("content");

contentサンプルにはプレフィックスがあります。名前空間とプレフィックスの優れた説明は、このw3schoolsの記事にあります。

アップデート:

そのドキュメントにはデフォルトの名前空間は定義されていません。プレフィックスが付いた要素の名前空間のみがあり、他の要素は名前空間なしで取得されます。プレフィックスを使用している要素のみが見つかりました。<content:encoded>その要素には、を使用する必要がありますns

于 2013-02-19T12:26:50.013 に答える