0

コードで読み取ろうとしているXML文字列があります

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

しかしnode、常に null です。誰が何が間違っているのか説明できますか?

<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 は接頭辞のない名前を「名前空間なし」にあると見なします。XmlNamespaceManagerxmlns を解決するために使用する必要があります

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 に答える