Как получить H1, H2, H3,... используя одно выражение xpath

Как я могу получить содержимое H1, H2, H3 в одном выражении xpath?

Я знаю, что смогу это сделать.

//html/body/h1/text()
//html/body/h2/text()
//html/body/h3/text() 

и т.д.

Ответы

Ответ 1

Использование

/html/body/*[self::h1 or self::h2 or self::h3]/text()

Недопустимое следующее выражение:

//html/body/*[local-name() = "h1"  
           or local-name() = "h2"  
           or local-name() = "h3"]/text()  

поскольку он может выбирать текстовые узлы, которые являются дочерними элементами unwanted:h1, different:h2, someWeirdNamespace:h3.

Другая рекомендация: всегда избегайте использования //, когда структура документа XML статически известна. Использование // чаще всего приводит к значительной неэффективности, потому что это приводит к тому, что полное дерево документа (под), связанное в контексте node, проходит.