所以我有一个如下所示的 XML 文档:
<?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 文档。假设我需要通过调用方法来获取节点中rate
属性的值。<Cube currency=USD" rate="1.2384"/>
SelectSingleNode(string xpath)
到目前为止,我能够想出这段代码:
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
设置为null。我检查了timeNode
它,它指向正确的节点,所以我猜问题出在SelectSingleNode
方法中的路径上,但我看不出问题出在哪里。我检查了其他有类似问题的帖子,但找不到任何可以解决地雷的帖子。任何指针将不胜感激。