繁体   English   中英

C# - 从XML文档中的特定标记获取值

[英]C# - Get value from a specific tag in XML document

我有一个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到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/

带有XmlNamespaceManagerXmlDocument类将支持获取数据所需的XPath表达式。

//Load the document
XmlDocument order = new XmlDocument();
order.Load("filepath.xml");

实例化命名空间管理器:

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 ,并确保选中它后所选节点不为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM