2014-09-28 4 views
0

У меня есть куча узлов, как это:XQuery найти атрибут по значению узла

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

То, что я хочу, чтобы получить идентификатор книги с текстовым узлом «Книга 2». Как мне это сделать? Я попытался это без какого-либо результата ($ док мой путь к документу):

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

EDIT: Я имел в виду, что $ документ является узлом документа, а не только путь.

ответ

2

Предполагая, что $doc фактически является документ-узел и не путь документ как вы описали его, то вы можете использовать следующие:

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

Проще говоря . относится к текущему пункту контекстного , который уже является книгой, поскольку это последняя часть XPath перед предикатом.

+0

прекрасный, это работало. Благодаря! – Myone

1

если $doc ваш путь к документу, вам необходимо позвонить fn:doc($doc), чтобы получить документ-узел:

fn:doc($doc)/root/books/book[. = "Book 2"]/data(@id) 
Смежные вопросы