2012-08-22 55 views
0

我有我试图用代码来读取XML字符串如何读取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> 
+0

什么是 “//车/车项目/ URL /文本()”? –

+0

Url值的路径。我需要阅读https://ws.plimus.com:443/services/2/subscriptions/9433117 – Tomas

+0

无法打开您的网址,它询问我的用户名/密码。 –

回答

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配置无论如何需要

+0

真正起作用的解决方案! – Tomas

+0

注意:如果您有可能将xml名称空间声明更改为xmlns:ns =“...”,那么可以省略XPath中的'ns:'子句 –

+0

你也可以使用XmlNodeList abc = xmlDoc.GetElementsByTagName(“url”); string value = abc.Item(0).InnerText; –

-1

当您指定// XPath中确定了要从根元素开始,所以你的XPath应该是:

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

+0

静态节点为空:( – Tomas