XPath - 查询两个XML文档

Arn*_*j65 5 xslt xpath

我有两个xml文档:

XML1:

<Books>
     <Book id="11">
          .......
          <AuthorName/>
     </Book>
     ......
</Books>
Run Code Online (Sandbox Code Playgroud)

XML2:

<Authors>
     <Author>
          <BookId>11</BookId>
          <AuthorName>Smith</AuthorName>
     </Author>
</Authors>
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行以下操作:

获取XML2/Author/AuthorName的值,其中XML1/Book/@id等于XML2/Author/BookId.

XML2/Author/AuthorName[../BookId = XML1/Book/@id]
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 4

一个 XPath 1.0 表达式不能引用多个 XML 文档,除非宿主语言已在 XPath 引擎的上下文中设置了对其他文档的引用。例如,如果 XSLT 是托管语言,那么它的document()函数可用于其托管的 XPath 引擎。

document($xml2Uri)/Authors/Author[BookId = $mainDoc/Books/Book/@id]
Run Code Online (Sandbox Code Playgroud)

<xsl:variable>请注意,即使是主 XML 文档也需要通过另一个名为 here 的文档进行引用$mainDoc

document()仅当 Xpath 由 XSLT 托管时,该功能才可用!布朗博士的回答中没有提到这一点,并且误导了读者。

doc()XPath 2.x 表达式可以使用 XPath 2.0函数引用任何其他 XML 文档

for $doc  in /,
    $doc2 in doc(someUri)
  return
    $doc2/Authors/Author[BookId = $doc/Books/Book/@id]
Run Code Online (Sandbox Code Playgroud)