5

プログラム BaseX では、XPath と XQuery を使用してホーム ディレクトリにある XML ドキュメントをクエリできましたが、XSLT で同じことを行うには問題があります。

クエリしているドキュメントはBookstoreQ.xmlです。

完全に正常に動作する XPath バージョン:

doc("/home/ioannis/Desktop/BookstoreQ.xml")/Bookstore/Book/Title

実行したい 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>

XSLT に関する BaseX のドキュメントを読みましたが、解決策を見つけることができませんでした。特定の XSLT を実行するにはどうすればよいですか?

4

1 に答える 1

3

BaseX は XSLT を直接サポートしていません。XQuery 関数を使用して呼び出す必要があります (ただし、これは簡単です)。これを行うための関数が 2 つあります。1 つは XML ノードを返すためのもの ( xslt:transform(...)) で、もう 1 つはテキストを文字列として返すための関数 ( xslt:transform-text(...)) です。2 つ目が必要です。

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>
)

どちらも XSLT をノード (ここで使用) として呼び出すか、文字列として渡すか、XSLT コードを含むファイルへのパスを指定して呼び出すことができます。

于 2013-02-19T20:05:44.687 に答える