Я имею, имеют два 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]
Выражение 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]
Функция document
- ваш друг, вот краткое руководство по объединению нескольких входных файлов.
EDIT: Конечно, это работает только если вы используете Xpath в сценарии Xslt.