И 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>