Почему выражение Xpath, заканчивающееся на [*], возвращает пустой список при изменении на [node()] возвращает элементы

#xml #xpath #predicate

#xml #xpath #предикат

Вопрос:

У меня есть XML-файл, в котором есть sortbits элемент, который имеет 32 bit элемента в качестве дочерних. Если я использую выражение xpath

 /config/portmod/sortbits/bit[*]
  

оно возвращает пустой список.

если я изменю его на

 /config/portmod/sortbits/bit[node()]
  

оно возвращает a NodeList со всеми 32 bit элементами.

Выражение

 /config/portmod/sortbits/bit[last()]
  

возвращает последний элемент. Почему [*] выражение ничего не возвращает?

Ответ №1:

Выражение bit[*] возвращает битовые элементы, у которых есть дочерний элемент. Если оно ничего не возвращает, предположительно, нет битовых элементов, у которых есть дочерний элемент.

Выражение bit[node()] возвращает битовые элементы, которые имеют какой-либо дочерний элемент, например дочерний элемент текстового узла. Предположительно, если bit[node()] возвращает элементы, а bit[*] нет, то у этих элементов есть дочерний текстовый узел, но нет дочернего элемента узла.

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

1. Спасибо, Майкл, похоже, это ответ. Выражение