我有两个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)
一个 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)