В чем разница между "элементом" и "// элементом" в XPath? - PullRequest
0 голосов
/ 24 июня 2018

Я читаю примеры XPath: https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx и хочу узнать разницу между этими двумя выражениями:

author
All <author> elements within the current context.

//author
All <author> elements in the document.

В чем разница между этими двумя случаями? Если «текущий контекст» является корневым узлом, это сделает эти два эквивалента?

Для этого простого XML-файла:

<root>
    <author>
        <first-name></first-name>
    </author>
</root>

Я пробовал на этом сайте https://www.freeformatter.com/xpath-tester.html

Почему author не возвращает ничего, как я ожидал, должно (но //author работает)?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Описание , которое вы цитируете для относительного выражения XPath, author,

Все <author> элементов в текущем контексте.

это неправильно 1 .Вместо этого следует сказать,

Все <author> child элементы текущего контекста node .

//author действительно выделит все элементы <author> в документе, потому что // выбирает по оси descendant-or-self.

Причина, по которой author не выбираетЧто-нибудь для вашего XML-документа заключается в том, что с узлом контекста, установленным в корневой каталог документа, вам нужно будет включить root/author, чтобы выбрать <author> потомков <root> или просто root, чтобы выбрать сам элемент <root>.

1 На сегодняшний день 2018-06-24, но я отправил отзыв о том, что это следует исправить, так что, надеюсь, это будет исправлено в ближайшее время.

0 голосов
/ 24 июня 2018

"element" выбирает все непосредственные дочерние элементы с именем "element" текущего узла и идентично "./element".

"//element" выбирает все узлы "element" на любой глубиненачиная с корня (игнорируя ваш текущий узел).

И чтобы завершить список:

".//element" выберет "элемент" потомков под текущим узлом на любой глубине.

"/element" будет искать только на корневом уровне (в вашем примере вам понадобится "/ root", чтобы получить что-нибудь).

А что касается "author", то нетнайти что-нибудь: сначала вы должны быть на уровне вашего корневого узла.«/root/author» получит нужный вам узел или сначала выберите «/root», и оттуда вы можете выбрать «author».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...