Как просмотреть каждый узел в xml-файле и вернуть true, если имя узла соответствует строке, и false в противном случае с помощью XQuery и XPath?

#xml #xpath #xquery

#xml #xpath #xquery

Вопрос:

Я хочу перебрать каждый узел в xml-документе и вернуть true, если узел равен определенному строковому значению, и false, если нет. Вывод должен быть похож на:

True False False True True True

True — это когда имя узла соответствует строке.

Спасибо.

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и добавьте репрезентативный образец вашего xml, а также строку, с которой вы хотите протестировать.

Ответ №1:

Я понимаю ваш вопрос как //*/(. instance of element(foo) или for $el in //* return $el instance of element(foo) (где foo будет имя элемента, который вы ищете).

Однако вы не могли бы передать его в виде строки, для этого вам понадобится declare $name as xs:string external := 'foo'; //*/(local-name() = $name) .

Ответ №2:

Если мы воспринимаем ваш вопрос буквально, это

 (//node()) ! (if (. = 'a certain string value') then 'True' else 'False'
  

Но я подозреваю, что под «узлом» вы действительно подразумеваете элемент (в этом случае это так //* ), и возможно, что под «совпадениями» вы подразумеваете что-то другое, кроме «=».