XPath:选择一个节点而不提取其子节点

Osc*_*rro 2 xml xpath

如何在不检索其所有子节点的情况下使用XPath选择节点?例如,在以下XML文档中:

<parentnode>
  <node1 a="b" b="c">
    <child1/>
    <child2/>
    ... many many child nodes
    <childN/>
  </node1>
  <node2/>
</parentnode>
Run Code Online (Sandbox Code Playgroud)

我希望能够选择'node1'元素以检查其属性,但是没有选择子节点,我不需要解析它可能是数千个元素,从而影响查询的性能(其输出用于在第三方库中构建一种带有数组和字典的DOM树).

更新:为了更清楚,我提到的第三方库实际上只是一个围绕libxml2解析器的Objective-C包装器,它使用任何XPath查询的结果构建由Foundation类构成的DOM树.查询本身是在已经解析的文档(xmlDocPtr)上执行的,该文档被重用于所有查询,所以是的,正如许多答案所说,文档已经在C级上进行了DOM,但Objective-C包装器实现产生了性能在这个特殊情况下.我可以修改这个库以选择性地不获取所选节点的子节点,但我认为可能有一种简单的方法来仅使用查询检索节点的属性.

Mic*_*Kay 5

像/ a/b/c这样的XPath表达式将选择c元素:它不会选择它们的子元素.许多人想象它也选择孩子的原因是很多工具会通过显示以c元素为根的整个子树来显示XPath表达式的结果.人们可以理解为什么他们这样做 - 它以视觉方式向您显示您所选择的内容 - 但XPath表达式本身只是返回指向所选元素的指针,而您从那里开始完全取决于您.(有些工具,而不是向您显示以元素为根的子树,显示具有其所有祖先的节点的路径 - 这同样有效.)