BaseX:在哪里声明要对其执行查询的 XML 文档

Ioa*_*nou 5 xslt xquery basex

使用 BaseX 程序,我能够使用 XPath 和 XQuery 来查询位于我的主目录中的 XML 文档,但是我在 XSLT 中执行相同操作时遇到了问题。

我正在查询的文档是BookstoreQ.xml

XPath 版本,运行完全正常:

doc("/home/ioannis/Desktop/BookstoreQ.xml")/Bookstore/Book/Title
Run Code Online (Sandbox Code Playgroud)

我要执行的 XSLT 代码:

<xsl:stylesheet version = "2.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
  <xsl:output method= "xml" indent = "yes" omit-xml-declaration = "yes" />
  <xsl:template match = "Book"></xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

在 XSLT 上阅读了BaseX 的文档,但没有找到解决方案。我如何运行给定的 XSLT?

Jen*_*rat 3

BaseX 没有对 XSLT 的直接支持,您必须使用 XQuery 函数来调用它(不过这很简单)。有两个函数可以执行此操作,一个用于返回 XML 节点 ( xslt:transform(...)),一个用于以字符串形式返回文本 ( xslt:transform-text(...))。你需要第二个。

xslt:transform-text(doc("/home/ioannis/Desktop/BookstoreQ.xml"),
  <xsl:stylesheet version = "2.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
    <xsl:output method= "xml" indent = "yes" omit-xml-declaration = "yes" />
    <xsl:template match = "Book"></xsl:template>
  </xsl:stylesheet>
)
Run Code Online (Sandbox Code Playgroud)

两者都可以通过将 XSLT 作为节点(此处使用)来调用,方法是将其作为字符串传递或提供包含 XSLT 代码的文件的路径。