c# - XPath 在 C# 中无法正常工作

标签 c# xml xpath xml-namespaces

我的代码没有返回节点

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

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

我很确定我的 XML 和 Xpath 是正确的。

我的 Xpath:/ItemLookupResponse/OperationRequest/RequestId

我的 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>

出于某种原因,我的 XPath 返回的节点始终为空。有人可以帮忙吗?

最佳答案

您的 XPath 几乎是正确的 - 它只是没有考虑根节点上的默认 XML 命名空间!

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

您需要考虑到这一点并像这样更改您的代码:

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);

然后你的 XPath 应该是:

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

现在,您的 node_.InnerText 肯定不再为 NULL!

关于c# - XPath 在 C# 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576024/

相关文章:

c# - 如何检查SQL数据库中是否有记录?

c# - 如何在单元测试期间覆盖 IQueryable 的 Contains 方法?

.net - <92FB64J> 是无效的 XML 标签吗?

android - 使用 Appcompat 在 pre-Lollipop 上错误的 Button textColor 和 drawablePadding

c# - XPathNavigator 帮助

c# - 如何给 "ping"一个域名?

c++ - Xerces C++ Unresolved 链接器错误

xslt - 如何对 XSLT 变量中创建的节点的值求和

java - javax.xml.xpath 中数字类型评估失败的结果是什么

c# - 热从另一个线程调用方法或从另一个线程触发事件,该事件在主线程上处理