Использование XQuery/XPath для получения значения атрибута элемента parent node
Учитывая этот XML-документ:
<?xml version="1.0" encoding="UTF-8"?>
<mydoc>
<foo f="fooattr">
<bar r="barattr1">
<baz z="bazattr1">this is the first baz</baz>
</bar>
<bar r="barattr2">
<baz z="bazattr2">this is the second baz</baz>
</bar>
</foo>
</mydoc>
который обрабатывается этим xquery:
let $d := doc('file:///Users/mark/foo.xml')
let $barnode := $d/mydoc/foo/bar/baz[contains(@z, '2')]
let $foonode := $barnode/../../@f
return $foonode
Я получаю следующую ошибку:
"Cannot create an attribute node (f) whose parent is a document node".
Кажется, что операция.. /- это удаление удаленных совпадающих узлов из остальной части документа, чтобы он считал документ node.
Я открыт для других подходов, но выбор родителя зависит от дочернего атрибута, содержащего определенную подстроку.
Ура!
Ответы
Ответ 1
В запросе, который вы написали, выбирается атрибут f. Однако не законно возвращать атрибут node из XQuery. Ошибка ссылается на выходной документ, который содержит только атрибут (хотя это сообщение об ошибке вводит в заблуждение, так как технически здесь нет выходного документа, возвращается только возвращаемый атрибут node).
Вероятно, вы хотели бы вернуть значение атрибута, а не сам атрибут
return data($foonode)