通过XmlNodeList进行迭代,值始终相同

问题描述

| 我有以下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和level的值:
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 \”。 有任何想法吗?     

解决方法

//stat[@name=\'nickname\']/text()
xpath查询中的ѭ2select选择根节点并从那里向下搜索。 您应将其替换为
./
,以从当前节点开始的搜索为
./stat[@name=\'nickname\']/text()
。     ,在您的
foreach
中尝试:
string nickname = node.SelectSingleNode(\"stat[@name=\'nickname\']\").InnerText;

mylist.Add(nickname);