3

WebサイトからXML-RSS-Feedを読み込もうとしています。したがって、非同期ダウンロードを使用しXDocumentて、XDocument.Parse()メソッドを使用してを作成します。

ドキュメントは、次のように非常に単純にすることを目的としています。

<root>
  <someAttribute></SomeAttribute>
  <item>...</item>
  <item>...</item>
</root>

今、私はすべての項目を読みたいと思います。したがって、私は試しました:

foreach (XElement NewsEntry in xDocument.Descendants("item"))

しかし、これは機能しません。ルート要素にいくつかの名前空間が定義されているため、このボードで修飾名を使用する投稿を見つけました。

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">

さて、私は利用可能な3つの名前空間すべてを試しました-何もうまくいきませんでした:

XName itemName = XName.Get("item", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
XName itemName2 = XName.Get("item", "http://purl.org/dc/elements/1.1/");
XName itemName3 = XName.Get("item", "http://purl.org/rss/1.0/modules/syndication/");

どんな助けでもいただければ幸いです。(通常、私は正規表現を使用してXML分析を行っていますが、今回はモバイルデバイス用に開発しているため、パフォーマンスに注意する必要があります。)

4

3 に答える 3

4

宣言の最後にデフォルトの名前空間を試していません。rdf

xmlns="http://purl.org/rss/1.0/"

デフォルトの名前空間の要素は、要素名の前に名前空間を追加する必要がないため、これは理にかなっています。

于 2010-10-13T13:43:48.370 に答える
2

XDocumentRSS読み取り問題の直接的な解決策ではありません。しかし、なぜ提供されたSyncdicationFeedクラスを使用してフィードをロードしないのですか?http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx

于 2010-10-13T13:49:34.430 に答える
0

これを試して

var elements = from p in xDocument.Root.Elements()
where p.Name.LocalName == "item"
select p;

foreach(var element in elements)
{
//Do stuff
}
于 2010-10-13T13:52:21.123 に答える