Ваш вопрос в основном выглядит следующим образом: Учитывая документ XML, Как найти дочерние узлы, у которых нет текстового содержимого.
Простое выражение XPath, такое как:
/bookstore/book/*[count(child::text()) = 0]
или
/bookstore/book/*[not(text())]
сделает это за вас. Применение этого выражения XPath к образцу документа вернет набор узлов, содержащий оба элемента page
. Вам не нужно заранее знать имя элемента страницы или даже имена всех возможных дочерних элементов элемента book
, как вы можете видеть.
Для объяснения: Вам необходимо запросить дочерние узлы элемента книги, которые не содержат ЛЮБЫХ текстовых дочерних узлов. Ось child :: * представляет все дочерние узлы текущего узла, а тип узла text () ограничивает типы обработанных узлов теми, которые содержат текстовое содержимое.
Редактировать : обратите внимание, что если вы хотите запросить нетекстовые узлы в любом XML-документе (в соответствии с вашим последним редактированием вопроса), вы должны выбрать предоставленный ответ nils_gate . Мой ответ был дан до вашего редактирования и иллюстрирует концепцию, а не предоставляет общее решение.