(//。)XPath中的表达式

时间:2015-06-14 14:34:13

标签: xml xpath

我在获取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']

谢谢

3 个答案:

答案 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,因此//表示书籍的任何后代。 .只是表示此处用于应用=运算符的元素本身。所以//表示所有后代,//.表示“以下内容适用于任何后代的元素。”