0

我有试图用代码读取的 XML 字符串

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(XMLString);
XmlNode node = xmlDoc.SelectSingleNode("//cart/cart-item/url/text()");
Console.WriteLine(node.Value);  

node始终为空。谁能解释什么是错的?

<order xmlns="http://ws.plimus.com">
<order-id>8301446</order-id>
<ordering-shopper>
<shopper-id>25879327</shopper-id>
</ordering-shopper>
<cart>
<charged-currency>USD</charged-currency>
<cart-item>
<sku>...</sku>
<quantity>1</quantity>
<url>
https://ws.plimus.com:443/services/2/subscriptions/9433117
</url>
<item-sub-total>9.00</item-sub-total>
</cart-item>
<tax>0.00</tax>
<tax-rate>0</tax-rate>
<total-cart-cost>9.00</total-cart-cost>
</cart>
</order>
4

2 回答 2

6

默认情况下,XPath 将无前缀名称视为“无命名空间”。您应该使用XmlNamespaceManager来解析 xmlns

XmlDocument xmlDoc = new XmlDocument();
XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable);

nm.AddNamespace("ns", "http://ws.plimus.com");
xmlDoc.LoadXml(xmlString);
XmlNode node = xmlDoc.SelectSingleNode("//ns:cart/ns:cart-item/ns:url/text()", nm);

Console.WriteLine(node.Value);  

编辑:如果您有可能将 xml 根元素更改为

<order xmlns:ns="http://ws.plimus.com">

那么您不需要每次都在 XPath 中指定“ns”,它看起来像//cart/cart-item/url/text().

XmlNamespaceManager无论如何都需要示例中所示的配置

于 2012-08-22T12:17:19.063 回答
-1

当您在 xpath 中指定 // 时,它确定从根元素开始,因此您的 xpath 应该是:

XmlNode node = xmlDoc.SelectSingleNode("//order/cart/cart-item/url/text()");

于 2012-08-22T12:09:06.163 回答