Путаница с концепцией Xpath

Я застрял в попытке выяснить, к чему приводят следующие выражения XPath в XML:

  1. paper/publisher/parent::*/author
  2. /bib//address[ancestor::book]
  3. /bib//author/ancestor::*//zip

1) Во-первых, показать все родительские элементы, у которых есть автор в качестве корневого элемента? Что означает */

2) Второй перечисляет все корневые элементы предков в книге?

3) Третий я действительно понятия не имею, он перечисляет все почтовые узлы

Просто запутался в том, как в целом работает узел-предок, пожалуйста, дайте несколько советов.


person NewSQLguy    schedule 18.04.2017    source источник
comment
Это не совсем учебный сайт. Для XPath доступны страницы и страницы документации; вы можете найти их через Google.   -  person Ken White    schedule 18.04.2017
comment
Как я уже объяснил, это не учебный сайт. Вам дали эти выражения XPath как часть вашего задания, и вы тот, кто должен ответить на эти вопросы. Если мы сделаем это за вас, вы ничему не научитесь. Если у вас нет возможности ответить на них, обратитесь за помощью к инструктору. Им платят за то, чтобы они снабдили вас знаниями, необходимыми для выполнения задания, а если вы этого не сделаете, значит, они еще не выполнили свою работу.   -  person Ken White    schedule 18.04.2017
comment
Теперь я еще больше запутался. У вас не только нет проблем, но вы ожидаете, что мы напишем для вас учебные пособия?   -  person Ken White    schedule 18.04.2017


Ответы (1)


  1. Первое выражение XPath использует ось parent:: с проверкой узлов с подстановочными знаками. От элемента publisher он «перескакивает» к своему родителю, элементу paper, а затем выбирает дочерний элемент author. Он выбирает этот элемент author только в том случае, если присутствует родственный элемент publisher. Его можно было бы написать более компактно и избежать поиска дерева узлов с помощью этого XPath, используя фильтр предиката для элемента paper: paper[publisher]/author.

  2. Этот XPath выбирает все элементы address, которые являются потомками элемента bib, а также потомками элемента book (который может быть предком или потомком предка bib). Квадратные скобки — это предикат, который фильтрует узлы, прошедшие проверку выражения. В этом случае он должен быть потомком элемента book, чтобы «пройти» тест и быть выбранным.

  3. Этот XPath ищет любой элемент zip, который является потомком элемента, который является предком элемента author, который является потомком элемента bib.

Ниже приведена визуализация осей XPath, чтобы понять, что означает выбор предка, родителя, брата, потомка и т. д.

визуализация осей XPath

Может быть полезно поиграть с инструментом визуализации XPath, чтобы сравнить ваши выражения XPath с некоторыми образцами XML и посмотреть, что выбрано, а что нет.

Например: http://chris.photobooks.com/xml

person Mads Hansen    schedule 18.04.2017