获取XML节点的属性值

时间:2019-02-28 16:30:44

标签: c# xml xmlnode

我正在尝试获取以下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();
        }

1 个答案:

答案 0 :(得分:1)

问题是"//"中的"//@Arg1"告诉它在文档中的任何地方,而不是您选择的特定节点,因此甚至以为您提取了每个<event>节点,然后始终获得文档中的第一个"//@Arg1"属性值。

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

如果有什么安慰,我认为这种"//"的举动并不直观!