使用 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)
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 代码的文件的路径。