XPath doesn't work as desired in C#

前端 未结 2 1800
名媛妹妹
名媛妹妹 2020-12-14 23:34

My code doesn\'t return the node

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

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


        
相关标签:
2条回答
  • 2020-12-15 00:21

    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!

    0 讨论(0)
  • 2020-12-15 00:36

    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;
    
    0 讨论(0)
提交回复
热议问题