7

Atom フィードをプログラムで解析しようとしています。アトム XML を文字列としてダウンロードしました。XML を .xml ファイルにロードできますXmlDocument。ただし、XPath を使用してドキュメントをトラバースすることはできません。私が試みるたびに、私は得るnull

この Atom フィードをテストとして使用しています: http://steve-yegge.blogspot.com/feeds/posts/default

" " を使用する場合を除いて、呼び出すSelectSingleNode()と常に が返されます。これが私が今試していることです:null/

using (WebClient wc = new WebClient())
{
    string xml = wc.DownloadString("http://steve-yegge.blogspot.com/feeds/posts/default");
    XmlNamespaceManager nsMngr = new XmlNamespaceManager(new NameTable());
    nsMngr.AddNamespace(string.Empty, "http://www.w3.org/2005/Atom");
    nsMngr.AddNamespace("app", "http://purl.org/atom/app#");
    XmlDocument atom = new XmlDocument();
    atom.LoadXml(xml);
    XmlNode node = atom.SelectSingleNode("//entry/link/app:edited", nsMngr);
}

私の XPath が原因かもしれないと思ったので、ルートが機能するはずだとわかっていたので、ルート ノードの簡単なクエリも試してみました。

// I've tried both with & without the nsMngr declared above
XmlNode node = atom.SelectSingleNode("/feed");

何をしても何も選択できないようです。明らかに何かが欠けています。何がわからないのですか。この Atom フィードで XPath を機能させるには、何をする必要がありますか?

編集

この質問には回答がありますが、この質問にはほぼ完全に重複することがわかりました: SelectNodes not working on stackoverflow feed

4

2 に答える 2

9

C# の実装ではデフォルトの名前空間が許可されている可能性がありますが (わかりません)、XPath 1.0 仕様では許可されていません。したがって、「Atom」に独自のプレフィックスを付けます。

nsMngr.AddNamespace("atom", "http://www.w3.org/2005/Atom");

XPath を適切に変更します。

XmlNode node = atom.SelectSingleNode("//atom:entry/atom:link/app:edited", nsMngr);
于 2009-02-01T17:21:27.170 に答える
0

文字列から XML をロードし、「エラー/エラー」ノードを検索します。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlResult);            
XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable);
nm.AddNamespace("ns", "http://somedomain.com/namespace1/2"); //ns - any name, make sure it is same in the below line

XmlNodeList errors = xmlDoc.SelectNodes("/ns:*//ns:Errors/ns:Error", nm);       

-マチュラン

于 2012-03-22T12:30:04.500 に答える