Используя XQuery/XPath для получения значения атрибута родительского узла элемента

Учитывая этот 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". 

Кажется, что../операция является видом удаления узлов соответствия от остальной части документа, таким образом, что это думает, что это - узел документа.

Я открыт для других подходов, но выбор родителя зависит от дочернего атрибута, содержащего определенную подстроку.

За Ваше здоровье!

20
задан Mark Stewart 29 January 2010 в 23:33
поделиться

1 ответ

Запрос, который вы написали, выбирает атрибут f. Однако не законно вернуть атрибут узел из XQuery. Ошибка обращается к выходному документу, который здесь содержит только атрибут (хотя это сообщение об ошибке вводит в заблуждение, так как технически нет выходного документа здесь, есть только узел атрибута, который возвращается).

Вы, вероятно, хотели вернуть значение атрибута, а не самого атрибута

return data($foonode)
31
ответ дан 30 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: