索引 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 表达式不执行"本质上相同的操作":

根据 XPath 规范:

位置路径//para[1] (...) 选择作为其父级的第一个para子元素的所有后代para元素。

类似地,XPath 表达式 //*[heads!=1][3]/name(查看应该立即产生 Eddie 的第 3 次迭代)选择所有后代元素的name子元素,这些后代元素是"其父级的第三个子元素,其头数与 1 不同"。

3是指在其父节点中满足指定磁头数限制的子节点集。

相反,请尝试: /descendant::*[heads!=1][{0}]/name