我在获取XPATH表达式结果时遇到了这个小问题!
假设我有这个小小的XML文件:
<bookstore>
<book>
<title lang="en">Learning Java</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning Xpath</title>
<price>39.95</price>
</book>
</bookstore>
结果如下:
//book[//.='Lear']
谢谢
答案 0 :(得分:1)
结果如下:
//book[//.='Lear']
您始终可以在xpath测试器中转储XML sample和xpath表达式,并自己查看结果(f.e使用http://www.freeformatter.com/xpath-tester.html或您喜欢的任何内容)。对于上面的xpath和XML示例,结果将一无所获。鉴于特定的XML输入,上面的xpath表达式与//book[false()]
相同。谓词([]
的内容)评估为false
,因为没有包含完整字符串"Lear"
的元素。
&#34;但是你能告诉我双斜杠符号后点的用处是什么吗?&#34;
要回答该评论,请参阅以下细分:
//
:descendant-or-self
轴的缩写语法。
.
:引用当前上下文节点。
//.
:您可以在在XML文档的任何位置找到任何节点时阅读此内容。这也可以表示为//self::node()
。请注意,//
从根元素开始搜索,它并不关心作为上下文的当前book
元素。
答案 1 :(得分:0)
如果您要查找所有包含“Lear&#39;”标题的书籍,请尝试以下操作:
//book[contains(title,'Lear')]
答案 2 :(得分:0)
//book
选择所有book
元素作为当前上下文的后代(在您的情况下将是根元素)。
[]
表示要应用于选择的条件,因此实质上您将过滤book
个元素。
在方括号[]
内,当前上下文变为book
,因此//
表示书籍的任何后代。 .
只是表示此处用于应用=
运算符的元素本身。所以//
表示所有后代,//.
表示“以下内容适用于任何后代的元素。”