XPath - запрос двух документов XML - PullRequest
5 голосов
/ 25 мая 2010

У меня есть два документа 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 / @ id равно XML2 / Author / BookId.

XML2/Author/AuthorName[../BookId = XML1/Book/@id]

Ответы [ 2 ]

4 голосов
/ 25 мая 2010

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

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

Обратите внимание, что даже на основной XML-документ необходимо ссылаться через другой <xsl:variable>, названный здесь $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]
0 голосов
/ 25 мая 2010

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

РЕДАКТИРОВАТЬ: Конечно, это работает, только если вы используете Xpath в сценарии Xslt.

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