获取 XML 节点的属性值

Posted

技术标签:

【中文标题】获取 XML 节点的属性值【英文标题】:getting the attribute values of XML node 【发布时间】:2019-02-28 16:30:44 【问题描述】:

我正在尝试获取以下 XML 的 Arg1,2 和 3 属性的值...在 XML 中,有 2 个不同的值,并且通过代码的迭代已被验证为迭代两次。但是相同的答案显示了两次,我不知道缺少什么...!!!

这是 XML:

-<event type="2VO">
-<properties>

<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>

<event title="Pixel VO" reconcileKey="106251137"/>

+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1910" Arg1="TON" RuleCode="2VO"/>

</properties>

</event>

-<event type="2VO">
-<properties>

<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>

<event title="Pixel VO" reconcileKey="106251137"/>


+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1932" Arg1="TUE" RuleCode="2VO"/>
</properties>
</event>

代码如下:

static void Main(string[] args)
    
        XmlDocument xdoc = new XmlDocument();

        xdoc.Load(@"C:\Users\namokhtar\Desktop\testxml.xml");

        foreach (XmlNode node in xdoc.SelectNodes("//event[@type='2VO']")) //or /CATALOG/CD

        

            var x = node.SelectSingleNode("//@Arg1").Value;
            var y = node.SelectSingleNode("//@Arg2").Value;
            var z = node.SelectSingleNode("//@Arg3").Value;

            Console.WriteLine("The first parameter is: " + x);
            Console.WriteLine("The first parameter is: " + y);
            Console.WriteLine("The first parameter is: " + z);
            Console.ReadKey();
        

【问题讨论】:

输出只有Arg1 =TON, Arg2 =1910, Arg3 = O1T13810 重复两次。 【参考方案1】:

问题是"//@Arg1" 中的"//" 告诉它查看文档中的任何位置,而不是特定于您选择的节点,所以即使您提取每个&lt;event&gt; 节点,您总是会得到第一个@987654324 @文档中的属性值。

要么使用".//@Arg1" 告诉它相对于当前节点进行搜索,或者更具体地使用XPath 并使用"./properties/media/@Arg1"

如果有什么安慰的话,我觉得 "//" 的这种行为并不直观!

【讨论】:

以上是关于获取 XML 节点的属性值的主要内容,如果未能解决你的问题,请参考以下文章

获取 XML 节点的属性值

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义

获取 XML 节点属性值

JS获取XML节点值

Xpath 获取父节点,其中子节点的两个属性具有特定值

怎样获取xml中当前节点的直接孩子节点个数