XQuery按节点值定位属性

时间:2014-09-28 09:19:54

标签: attributes xquery

我有一堆像这样的节点:

<root>
   <books>
      <book id="1">Book 1</book>
      <book id="2">Book 2</book>
      <book id="3">Book 3</book>
   </books>
</root>

我想要的是用文本节点“Book 2”获取书籍的id。我该怎么做呢?我尝试了这个没有任何结果($ doc是我的文档路径):

let $b := $doc/root/books/book[book = "Book 2"]
return data($b/@id)

编辑:我的意思是$ doc是文档节点,而不仅仅是路径。

2 个答案:

答案 0 :(得分:2)

假设$doc实际上是文档节点,而不是您描述的文档路径,那么您可以使用以下内容:

$doc/root/books/book[. = "Book 2"]/data(@id)

简单地将.引用到当前上下文项,该项已经预订,因为它是谓词之前的XPath的最后一部分。

答案 1 :(得分:1)

如果$doc是您的文档路径,则您需要致电fn:doc($doc)以获取文档节点:

fn:doc($doc)/root/books/book[. = "Book 2"]/data(@id)