问题描述
|
我有以下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);