В чем разница между «/ 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?