繁体   English   中英

这些在xpath中有什么区别?

[英]what is the difference between these in xpath?

我是xpath的新手,现在可以让我详细介绍一下xpath中的/bookstore/*/bookstore什么区别吗?

可以说这是示例输入

<bookstore>
    <book>
      <title lang="en">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="en">Learning XML</title>
      <price>39.95</price>
    </book>
</bookstore>

<bookstore>

    <book>
      <title lang="en">Harry Potter1</title>
      <price>29.999</price>
    </book>

    <book>
      <title lang="en">Learning XML1</title>
      <price>39.955</price>
    </book>

</bookstore>

两种情况下将输出什么? 提前致谢。

假设以下简单的输入文档:

<bookstore>
   <book/>
   <book/>
</bookstore>

现在,表达

/bookstore

手段

选择一个名为bookstore的元素,但前提是它是文档的最外面的元素

格式良好的XML 1中只能有一个最外面的元素,因此上面的路径表达式最多只能选择一个元素节点。

/bookstore/*

手段

选择一个名为bookstore的元素,但前提是它是文档的最外面的元素。 然后,选择其所有直接子元素,无论其名称如何。

1正如Michael Kay指出的,除了您正在以编程方式构造XML树。 然后,可能有多个最外面的元素。


那么如果/ bookstore / *输出,则不包含<bookstore></bookstore>

我可以看到两种阅读此问题的方法。

为什么同时使用<element></element>

<bookstore></bookstore>视为一个元素 它们是该元素的开始和结束标签 将输入文档读入内存后,将其存储在没有打开和关闭标签的树状结构(例如DOM)中。 而正是这种表示形式可以用来评估XPath表达式。

但是,如果输出评估XPath表达式的结果,则结果树再次序列化 ,并且重新出现标签-这可能会造成混淆。

是否选择了路径中提到的所有元素?

不,像这样的表达

/bookstore/book

仅选择book元素节点。 仅选择最后一个轴心步骤之后最右边的项目(如/parent:: :)

表达式/bookstore/*将选择子节点, /bookstore将选择节点本身。

例如, /bookstore/*将选择/bookstore下的所有子元素 ,因此您可能最终得到了一个元素集合。 请注意,如果这是一个更复杂的表达式(如/bookstore/book/*并且存在多个/bookstore/book元素,则将选择所有匹配节点的所有子级。

表达式/bookstore将仅选择元素/bookstore 与上述类似,如果沿着/bookstore/book类的路径进行选择,可能会导致元素集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM