我是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>
两种情况下都会输出什么? 提前谢谢。
答案 0 :(得分:1)
假设以下简单的输入文档:
<bookstore>
<book/>
<book/>
</bookstore>
现在,表达式
/bookstore
装置
选择名为
bookstore
的元素,但前提是它是文档的最外层元素
格式良好的XML 1 中只能有一个最外层的元素,因此上面的路径表达式最多只能选择一个元素节点。
/bookstore/*
装置
选择名为
bookstore
的元素,但前提是它是文档的最外层元素。然后,选择所有直接子元素,无论其名称如何。
1 正如迈克尔凯指出的那样,除了你以编程方式构建XML树。然后,可能有多个最外层的元素。
然后在/ bookstore / * out的情况下,wil不包含
<bookstore>
和</bookstore>
我可以通过两种方式阅读这个问题。
为什么同时为<element>
和</element>
?
将<bookstore>
和</bookstore>
视为 one,single element 。它们是该元素的开始和结束标记。将输入文档读入内存后,它将存储在树状结构(例如DOM)中,没有开始和结束标记。正是这种表示法是对你的XPath表达式进行评估。
但是,如果输出评估XPath表达式的结果,那么结果树将再次序列化,并且标签会重新出现 - 这可能会造成混淆。
是否已选择路径中提到的所有元素?
不,在像
这样的表达式中/bookstore/book
仅选择book
个元素节点。仅选择最后一个 axist步骤之后的最右边的项目(/
和parent::
之类的内容)。
答案 1 :(得分:0)
表达式/bookstore/*
将选择子项,/bookstore
将选择节点本身。
例如,/bookstore/*
会在/bookstore
下选择所有子元素,因此您最终可能会得到一系列元素。请注意,如果这是一个更复杂的表达式,如/bookstore/book/*
,并且有多个/bookstore/book
元素,则会选择所有匹配节点的所有子节点。
表达式/bookstore
将仅选择元素/bookstore
。与上述类似,如果元素位于/bookstore/book
之类的路径上,则此类选择可能会产生元素集合。