C# 如何读取XML数据

C# 如何读取XML数据,c#,xml-parsing,C#,Xml Parsing,我有一个XML字符串,我正试图用代码读取它 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(XMLString); XmlNode node = xmlDoc.SelectSingleNode("//cart/cart-item/url/text()"); Console.WriteLine(node.Value); 但是节点始终为空。谁能解释一下怎么了 <order xmlns="http://ws.plimus.com

我有一个XML字符串,我正试图用代码读取它

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(XMLString);
XmlNode node = xmlDoc.SelectSingleNode("//cart/cart-item/url/text()");
Console.WriteLine(node.Value);  
但是
节点
始终为空。谁能解释一下怎么了

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

8301446
25879327
美元
...
1.
https://ws.plimus.com:443/services/2/subscriptions/9433117
9
0
0
9

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


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

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


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

默认情况下,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根元素更改为

然后,您不需要每次都在XPath中指定'ns',它看起来像
//cart/cart item/url/text()


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

默认情况下,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根元素更改为

然后,您不需要每次都在XPath中指定'ns',它看起来像
//cart/cart item/url/text()


XmlNamespaceManager
示例中所示的配置是必需的

什么是“//cart/cart item/url/text()”?url值的路径。我需要阅读无法打开你的url,它要求我用户名/密码。Jitendra,这是他的url在xml:)XmlNodeList abc=xmlDoc.GetElementsByTagName(“url”);字符串值=abc.Item(0).InnerText;这也会起作用。什么是“//cart/cart item/url/text()”?url值的路径。我需要阅读无法打开你的url,它要求我用户名/密码。Jitendra,这是他的url在xml:)XmlNodeList abc=xmlDoc.GetElementsByTagName(“url”);字符串值=abc.Item(0).InnerText;注意:如果您有可能将xml名称空间声明更改为xmlns:ns=“…”,那么您可以在XPath中省略“ns:”子句您还可以使用XmlNodeList abc=xmlDoc.GetElementsByTagName(“url”);字符串值=abc.Item(0).InnerText;是的,我只是不想更改XPath,因为它已经在当前解决方案中使用注意:如果可以将xml名称空间声明更改为xmlns:ns=“…”,那么可以在XPath中省略“ns:”子句您还可以使用XmlNodeList abc=xmlDoc.GetElementsByTagName(“url”);字符串值=abc.Item(0).InnerText;是的,我只是不想更改XPath,因为它已经在当前解决方案中使用