从XML文档中的特定标签获取值
本文关键字:标签 获取 XML 文档 | 更新日期: 2023-09-27 18:03:36
我有一个xml文档,看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<cbn:PaidOrderNotification xmlns:cbn="http://xml.test.com/3.12.0.0/test.xsd">
<cbn:NotificationDate>2016-08-01T07:28:46.679414Z</cbn:NotificationDate>
<cbn:Purchase cbt:Id="95368158" xmlns:cbt="http://xml.test.com/3.12.0.0/testTypes.xsd">
<cbt:Status>Test Order</cbt:Status>
<cbt:Items>
<cbt:Item cbt:RunningNo="1">
<cbt:ProductId>178732</cbt:ProductId>
<cbt:Payment cbt:SubscriptionId="S18767146">
<cbt:CancelUrl>https://store.test.com/</cbt:CancelUrl>
<cbt:ChangeUrl>https://test.com/</cbt:ChangeUrl>
</cbt:Payment>
</cbt:Item>
</cbt:Items>
<cbt:ExtraParameters />
</cbn:Purchase>
</cbn:PaidOrderNotification>
使用c#,我想获得<cbt:CancelUrl>
标签中的值。我该怎么做呢?
首先阅读xml
文档,如下:
var doc = new XmlDocument();
doc.LoadXml(_xml);
那么你可以写:
string CancelUrl = doc.GetElementsByTagName("cbt:CancelUrl")[0].InnerText;
string ChangeUrl = doc.GetElementsByTagName("cbt:ChangeUrl")[0].InnerText;
如果使用Linq to Xml,选择它的方法是定义一个XNamespace
对象,如下所示:
XNamespace cbt = "http://xml.test.com/3.12.0.0/testTypes.xsd";
var result = XDocument.Load("data.xml").Root
.Descendants(cbt + "CancelUrl")
.FirstOrDefault()?.Value;
//result - https://store.test.com/
具有XmlNamespaceManager
的XmlDocument
类将支持获取数据所需的XPath表达式。
//Load the document
XmlDocument order = new XmlDocument();
order.Load("filepath.xml");
实例化namespace管理器:
XmlNamespaceManager xmlns = new XmlNamespaceManager(order.NameTable);
xmlns.AddNamespace("cbt", "http://xml.test.com/3.12.0.0/testTypes.xsd");
现在您可以使用名称空间管理器来选择您需要的信息。这个XPath表达式("//cbt:CancelUrl"
)选择整个文档中的任何CancelUrl节点,并且可以使用更合格的路径使其更具体。
string xpath = "//cbt:CancelUrl"
XmlNode cancelUrl = Order.SelectSingleNode(xpath, xmlns);
string value = cancelUrl.InnerText;
您可能希望更仔细地指定XPath,并确保所选节点在选择后不为空。