Разница в XPath между child :: * и child :: node () - PullRequest
0 голосов
/ 27 августа 2018

Есть ли разница между следующими двумя выражениями xpath?

  • child::*
  • child::node()

Я попробовал оба выражения на этой странице игровой площадки и получил тот же результат.

W3schools говорит

child::* Выбирает все дочерние элементы текущего узла

child::node() Выбирает все дочерние элементы текущего узла

но я не понимаю разницу.

1 Ответ

0 голосов
/ 27 августа 2018

И child::*, и child::node() относятся к потомкам текущего узла, так что разница действительно в разнице между таковыми у элемента и узел .

Элемент является типом узла .

XPath имеет следующие типы узлов в своей модели XML:

  • элемент
  • атрибут
  • текст
  • имена
  • инструкция по обработке (PI)
  • комментарий
  • корень

Для вашего примера XML / HTML,

<html>
    <head>
        <title>My page</title>
    </head>
    <body>
        <h2>Welcome to my <a href="#">page</a></h2>
        <p>This is the first paragraph</p>.
        <!-- this is the end -->
    </body>
</html>

есть count(//*) = 7 элементов и count(//node()) = 21 узел.

XPath вашей игровой площадки - //h2/a, что на самом деле не иллюстрирует child::* против child::node().

Если вместо этого вы рассмотрите //h2/* против //h2/node(), тогда

  • //h2/* выбирает один узел , элемент :

    <a href="#">page</a>
    
  • //h2/node() выбирает два узла , текст узел и элемент :

    Welcome to my
    <a href="#">page</a>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...