В чем разница между «/ node ()» и «node ()» в XPath?
В соответствии с моим пониманием XPath для любого документа HTML или XML:
$x("/node()")означает, $x("/child::node()")что означает возврат узла, который является дочерним по отношению к контекстному узлу. Здесь корневой узел (/)- это контекстный узел. Следовательно, он возвращает htmlэлемент.
$x("node()")означает, $x("child::node()")что также возвращает тот же htmlэлемент. Но в этом случае мы не предоставили контекстный узел, как в предыдущем случае. Итак, как в этом случае он определяет контекстный узел?
Кроме того, синтаксически и функционально оба вышеуказанных выражения XPath одинаковы.
Ответы
Разница в том, что /node()контекстный узел определяется абсолютно как корневой ( /) документа, но node()полагается на подразумеваемый относительный контекстный узел.
Как определяется подразумеваемый относительный узел контекста? Ну, исходя из контекста. ;-) Например, язык хостинга обычно устанавливает начальный узел контекста на текущий узел, который сопоставляется или повторяется. Затем, в рамках оценки самого XPath, каждый шаг определения местоположения (разделенный косой чертой /) устанавливает контекстный узел для последующих шагов.
$x(path, [startNode])Обозначения , используемые в Chrome консоли принимает необязательный второй аргумент , который может быть использован для указания узла контекста явно. По умолчанию он равен корневому узлу документа, что приводит к наблюдаемому поведению, когда $x("node()")и $x("/node()")возвращают те же результаты для данного документа.
Кроме того, синтаксически и функционально оба вышеуказанных выражения XPath одинаковы.
Ясно , что node()и child::node()являются синтаксически различными, но, да, они семантически (или функционально , как вы говорите) то же самое , потому что child::ось ось по умолчанию.
Смотрите также
- Текущий узел против узла контекста в XSLT / XPath?
- В чем разница между корневым узлом, корневым элементом и элементом документа в XML?
- В чем разница между .// и // * в XPath?