Как использовать динамическое выражение пути в Xquery - PullRequest
2 голосов
/ 23 ноября 2011

Я довольно новичок в xquery, поэтому, пожалуйста, потерпите меня, стараясь лучше задать этот вопрос.

, когда я использую следующее утверждение (для выбора последовательности), оно работает просто отлично:

let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/ns0:PartDetails/ns0:partName

это загружает все элементы (как последовательность) в переменную $ parts так, как я хотел бы, но ...

Я хочу назначить "/ns0:partName" динамически.Я прошел через все функции Qname, думая, что они как-то помогут, но не повезло.после 2 дней борьбы, я надеюсь, что один из вас может указать мне правильное направление.

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

В своем выражении пути вы можете заменить элемент на * и добавить предикаты для фильтрации результатов, предикаты могут содержать динамические переменные. Например:

*[local-name()=$someName and namespace-uri()=$someURI]
2 голосов
/ 23 ноября 2011

Для упрощения ответа Винсента вы можете просто проверить, что xs: QName соответствует имени узла () узла

let $elementName = QName("urn:namespace", "PartDetails")
...
let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/*[node-name() = $elementName]/ns0:PartName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...