получение значений атрибутов узла XML - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь получить значения атрибутов Arg1,2 и 3 из приведенного ниже XML ... в 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 голосов
/ 28 февраля 2019

Проблема в том, что "//" в "//@Arg1" говорит ему искать в любом месте документа, а не в узле, который вы выбрали, поэтому даже если вы извлечете каждый узел <event>, вы всегда получите первый "//@Arg1" значение атрибута в документе.

Либо используйте ".//@Arg1", чтобы сообщить ему о поиске относительно текущего узла, либо более конкретно укажите XPath и используйте "./properties/media/@Arg1"

Если этоникакого утешения, я не считаю это "//" поведение интуитивным!

...