1

私はこの XSLT スタイルシートを持っていますxinclude-test.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xi="http://www.w3.org/2001/XInclude">
  <xsl:output method="text"/>
  <xi:include href="xinclude-test-included.xml"/>

  <!-- <xsl:param name="test"> -->
  <!--   aaa -->
  <!-- </xsl:param> -->

  <xsl:template name="main">
    <xsl:value-of select="$test"/>
  </xsl:template>
</xsl:stylesheet>

同梱ファイルxinclude-test-included.xml

<?xml version="1.0" encoding="utf-8"?>
<xsl:param name="test" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
aaa
</xsl:param>

スタイルシートを評価すると

saxon -xi -xsl:xinclude-test.xsl -it:main -t

印刷します

Saxon-HE 9.8.0.1J from Saxonica
Java version 1.8.0_31
Static error at char 5 in xsl:value-of/@select on line 13 column 35 of xinclude-test.xsl:
  XPST0008: Variable test has not been declared (or its declaration is not in scope)
Errors were reported during stylesheet compilation

「aaa」と出力されると思います。

ただし、別のスタイルシートを使用して最初の XSLT をロードすると、次のようになります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0">
  <xsl:template name="main">
    <xsl:copy-of select="document('xinclude-test.xsl')"/>
  </xsl:template>
</xsl:stylesheet>

XInclude 処理を正しく行います。

では、最初の XSLT で何が間違っていたのでしょうか?

4

2 に答える 2

1

ドキュメンテーションはコードと一致しません。残念ながら、Saxon はスタイルシート ドキュメントに -xi オプションを適用しようとはしていません。コードとドキュメントのどちらを正しいものとして扱うかを決定する必要があります。

ここでバグとして提起されました: https://saxonica.plan.io/issues/3343

于 2017-07-07T22:08:01.167 に答える