索引 xpath 查询时缺少结果
本文关键字:结果 xpath 查询 索引 | 更新日期: 2023-09-27 17:56:15
Xml 文件在这里。
以下两个循环给出不同的输出,尽管它们基本上执行相同的操作:
XPathNavigator nav = xmlDoc.CreateNavigator();
foreach (object v in (XPathNodeIterator)nav.Evaluate(@"//*[heads!=1]/name"))
{
Console.Out.WriteLine(v);
}
for (int i = 1; i <= 3; i++)
{
Console.Out.Write(i);
Console.Out.WriteLine(nav.Evaluate(string.Format("string(//*[heads!=1][{0}]/name)", i)));
}
输出:
Zaphod
Frankie and Benji
Eddie
1Zaphod
2Frankie and Benji
3
为什么"埃迪"在 for 循环的末尾丢失了?
两个 XPath 表达式不执行"本质上相同的操作":
根据 XPath 规范:
位置路径
//para[1]
(...) 选择作为其父级的第一个para
子元素的所有后代para
元素。
类似地,XPath 表达式 //*[heads!=1][3]/name
(查看应该立即产生 Eddie 的第 3 次迭代)选择所有后代元素的name
子元素,这些后代元素是"其父级的第三个子元素,其头数与 1 不同"。
即3
是指在其父节点中满足指定磁头数限制的子节点集。
相反,请尝试: /descendant::*[heads!=1][{0}]/name