C# SelectSingleNode返回null
所以我有一个XML文档,看起来像这样:C# SelectSingleNode返回null,c#,xml,selectsinglenode,C#,Xml,Selectsinglenode,所以我有一个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</gesme
<?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>
这里的问题是
currencyNode
在这里设置为null。我已经检查了timeNode
,它指向了正确的节点,因此我猜问题出在SelectSingleNode
方法中的路径,但我看不出问题出在哪里。我检查过其他有类似问题的帖子,但没有找到任何解决问题的方法。任何指针都将受到欢迎。默认情况下,XML属性没有名称空间,因此不需要在它们上使用名称空间前缀。试试看:
XmlNode currencyNode = timeNode.SelectSingleNode("descendant::ecb:Cube[@currency='USD']", nsmgr);
您也不需要在此处显式指定子体轴,因为默认情况下它将查看子体,因此您也可以将其缩短为:
XmlNode currencyNode = timeNode.SelectSingleNode("ecb:Cube[@currency='USD']", nsmgr);
将xpath更改为
descendant::ecb:Cube[@currency="USD"]
谢谢工作得很好。属性名称空间上的指针很棒,我在添加我的答案时不知道.hmmm,发布了类似的答案:(。
descendant::ecb:Cube[@currency="USD"]