所以我有一個看起來像這樣的XML文檔:
的SelectSingleNode返回null
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2010-05-28">
<Cube currency="USD" rate="1.2384"/>
<Cube currency="JPY" rate="113.06"/>
</Cube>
<Cube time="2010-05-27">
<Cube currency="USD" rate="1.2255"/>
<Cube currency="JPY" rate="110.79"/>
</Cube>
</Cube>
</gesmes:Envelope>
現在假設我有一個XmlNode timeNode
指向<Cube time="2010-05-28">
節點和document
指向加載XML文檔。假設我需要通過調用SelectSingleNode(string xpath)
方法來獲得<Cube currency=USD" rate="1.2384"/>
節點中rate
屬性的值。
到目前爲止,我能想出這個代碼:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("ecb", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
nsmgr.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
XmlNode currencyNode = timeNode.SelectSingleNode("descendant::ecb:Cube[@ecb:currency='USD']", nsmgr);
string rate = currencyNode.Attributes.GetNamedItem("rate").Value;
的這裏的問題是,currencyNode
在此處設置爲空。我檢查了timeNode
,它指向正確的節點,所以我想問題是在SelectSingleNode
方法中的路徑,但我無法看到問題出在哪裏。我檢查了其他類似問題的帖子,但找不到任何可以解決地雷問題的帖子。任何指針將不勝感激。
謝謝。完美工作。屬性名稱空間上的大指針,我不知道。 – 2010-08-01 13:29:32