繁体   English   中英

从xml节点C#获取元素

[英]Get element from xml node C#

我有xml,我想获取node的值。 我的XML看起来:

<?xml version="1.0" encoding="UTF-8"?>
<jdf:root xmlns:jdf="xxxxxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jdf:header>

    <jdf:locale-code>xx</jdf:locale-code>
    <jdf:country-code>xx</jdf:country-code>
</jdf:header>
<app:data xmlns:app="xxxxxx">
    <app:EventOut xmlns:ns2="xxxxxxx">
        <app:eventId>xxx</app:eventId>
        <app:distributorId>xxx</app:distributorId>
        <app:distributionNetworkId>xxx</app:distributionNetworkId>
        <app:typology>xxx</app:typology>
        <app:targets>
            <app:target>
                ......
            </app:target>
            <app:target>
                .....
            </app:target>
        </app:targets>
        <app:object>
            <ns2:internalEventObject>
                <ns2:id>!!!!!!!!</ns2:id>
                <ns2:lang1>xxx</ns2:lang1>
            </ns2:internalEventObject>
        </app:object>
        ...
    </app:EventOut>
</app:data>

我只是尝试:

    XmlDocument xml = new XmlDocument();
    xml.LoadXml(eventOutXml);

    var nsmgr = new XmlNamespaceManager(xml.NameTable);
    nsmgr.AddNamespace("ns2", "http://www.w3.org/1999/XSL/Transform");

    XmlNode anode = xml.SelectSingleNode("//ns2:id", nsmgr);

但这是行不通的。

在我的XML中,我只有几个名称空间:jdf,app,ns2。 也许我必须添加所有这些?

写下该节点的完整路径。

XmlNode anode = xml.SelectSingleNode("/ns2:internalEventObjects/ns2:id", nsmgr);

您的xml缺少结束标记。 您在代码中添加的名称空间在xml中是不同的。 我对xml进行了这两个更改,并且能够使它正常工作。

更新的xml:

<?xml version="1.0" encoding="UTF-8"?>
<jdf:root xmlns:jdf="xxxxxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jdf:header>
    <jdf:locale-code>xx</jdf:locale-code>
    <jdf:country-code>xx</jdf:country-code>
</jdf:header>
<app:data xmlns:app="xxxxxx">
    <app:EventOut xmlns:ns2="http://www.w3.org/1999/XSL/Transform">
        <app:eventId>xxx</app:eventId>
        <app:distributorId>xxx</app:distributorId>
        <app:distributionNetworkId>xxx</app:distributionNetworkId>
        <app:typology>xxx</app:typology>
        <app:targets>
            <app:target>
                ......
            </app:target>
            <app:target>
                .....
            </app:target>
        </app:targets>
        <app:object>
            <ns2:internalEventObject>
                <ns2:id>!!!!!!!!</ns2:id>
                <ns2:lang1>xxx</ns2:lang1>
            </ns2:internalEventObject>
        </app:object>
        ...
    </app:EventOut>
</app:data>
</jdf:root>

在编写代码之后,只需使用它即可获取值。

var value = anode.InnerText; //!!!!!!!!

让我知道这个是否奏效!

暂无
暂无

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

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