XPath doesn't work as desired in C#

孤街浪徒 提交于 2019-11-27 14:01:09

问题


My code doesn't return the node

XmlDocument xml = new XmlDocument();
xml.InnerXml = text;

XmlNode node_ =  xml.SelectSingleNode(node);
return node_.InnerText; // node_ = null !

I'm pretty sure my XML and Xpath are correct.

My Xpath : /ItemLookupResponse/OperationRequest/RequestId

My XML :

<?xml version="1.0"?>
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  <OperationRequest>
    <RequestId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx</RequestId>
    <!-- the rest of the xml is irrelevant -->
  </OperationRequest>
</ItemLookupResponse>

The node my XPath returns is always null for some reason. Can someone help?


回答1:


Your XPath is almost correct - it just doesn't take into account the default XML namespace on the root node!

<ItemLookupResponse 
    xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
             *** you need to respect this namespace ***

You need to take that into account and change your code like this:

XmlDocument xml = new XmlDocument();
xml.InnerXml = text;

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("x", "http://webservices.amazon.com/AWSECommerceService/2005-10-05");

XmlNode node_ = xml.SelectSingleNode(node, nsmgr);

And then your XPath ought to be:

 /x:ItemLookupResponse/x:OperationRequest/x:RequestId

Now, your node_.InnerText should definitely not be NULL anymore!




回答2:


Sorry for the late reply but I had a similar problem just a moment ago.

if you REALLY want to ignore that namespace then just delete it from the string you use to initialise the XmlDocument

text=text.Replace(
"<ItemLookupResponse xmlns=\"http://webservices.amazon.com/AWSECommerceService/2005-10-05\">",
"<ItemLookupResponse>");

XmlDocument xml = new XmlDocument();
xml.InnerXml = text;

XmlNode node_ =  xml.SelectSingleNode(node);
return node_.InnerText;


来源:https://stackoverflow.com/questions/2576024/xpath-doesnt-work-as-desired-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!