XPath - Запросы двух XML-документов

Я имею, имеют два xml документа:

XML1:

<Books>
     <Book id="11">
          .......
          <AuthorName/>
     </Book>
     ......
</Books>

XML2:

<Authors>
     <Author>
          <BookId>11</BookId>
          <AuthorName>Smith</AuthorName>
     </Author>
</Authors>

Я пытаюсь сделать следующее:

Получите значение XML2/Author/AuthorName, где XML1/Book / идентификатор равняется XML2/Author/BookId.

XML2/Author/AuthorName[../BookId = XML1/Book/@id]
5
задан marc_s 6 November 2016 в 17:02
поделиться

2 ответа

Выражение XPath 1.0 не может ссылаться более чем на один XML-документ , если только ссылки на дополнительные документы не были установлены в контексте механизма XPath языком хоста. Например, если XSLT является языком хостинга, то он делает свою функцию document () доступной для механизма XPath, на котором он размещен.

document($xml2Uri)/Authors/Author[BookId = $mainDoc/Books/Book/@id]

Обратите внимание, что даже на основной XML-документ нужно ссылаться через другую , названную здесь $ mainDoc .

Функция document () доступна, только если Xpath размещается в XSLT ! Об этом не упоминается в ответе Дока Брауна и вводит читателей в заблуждение.

Выражение XPath 2.x может относиться к любому дополнительному XML-документу, использующему функцию XPath 2.0 doc () .

for $doc  in /,
    $doc2 in doc(someUri)
  return
    $doc2/Authors/Author[BookId = $doc/Books/Book/@id]
4
ответ дан 15 December 2019 в 00:52
поделиться

Функция document - ваш друг, вот краткое руководство по объединению нескольких входных файлов.

EDIT: Конечно, это работает только если вы используете Xpath в сценарии Xslt.

0
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: