Итерация по XmlNodeList, значение всегда одинаково - PullRequest
8 голосов
/ 24 мая 2011

У меня есть следующий XML:

<xmlRequest>
<stats>
<match mid='40704828'>
    <match_stats>
    <ms aid='254664' cli_name='Hero_Engineer'>
        <stat name='nickname'>lethallynx</stat>
        <stat name='level'>11</stat>
    </ms>
    <ms aid='354522' cli_name='Hero_Devourer'>
        <stat name='nickname'>AbendrothA</stat>
        <stat name='level'>12</stat>
    </ms>
    </match_stats>
</match>
</stats>
</xmlRequest>

Я пытаюсь извлечь значение nickName и уровень, используя следующий код:

XmlNodeList nodeList = doc.SelectNodes("//ms");

List<string> myList = new List<string>();

foreach (XmlNode node in nodeList) 
{
       XmlNode nodeNickName = node.SelectSingleNode("//stat[@name='nickname']/text()");

       mylist.Add(nodeNickName.Value);
}

Проблема в том, что, хотя я могупосмотрите, как объект узла обновляется следующим набором данных, возвращаемое значение всегда совпадает с первым псевдонимом.

Таким образом, nodeNickName.Value всегда равно "lethallynx".

Есть идеи?

Ответы [ 2 ]

14 голосов
/ 24 мая 2011

// в вашем запросе //stat[@name='nickname']/text() xpath выбирает корневой узел и выполняет поиск вниз оттуда.

Вы должны заменить это на ./, который берет поиск с текущего узла, как ./stat[@name='nickname']/text()

0 голосов
/ 24 мая 2011

В вашем foreach попробовать:

string nickname = node.SelectSingleNode("stat[@name='nickname']").InnerText;

mylist.Add(nickname);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...