6.8.3 XSLT要素の注意事項
項番 |
注意事項 |
---|---|
1 |
xsl:apply-imports要素が処理されません。 |
2 |
テンプレートがxsl:with-paramによってパラメタとしてノード集合を受け取った場合,そのパラメタをxsl:apply-templates要素のselect属性で参照すると,それ以降,同じパラメタを参照してもノード集合を取得できなくなります。 |
3 |
xsl:attribute要素の子要素がxsl:copyの場合,出力される属性値が空になります。 |
4 |
xsl:attribute要素の内容にxsl:value-of要素を指定する場合は,select属性に指定するXPath式を絶対ロケーションパスで記述してください。 |
5 |
xsl:attribute-set要素がuse-attribute-sets属性で自分自身を参照(循環参照)する場合,XSLTCではスタックオーバーフローが発生します。 |
6 |
すべての属性の属性値が等しいxsl:decimal-format要素を複数個定義した場合,XSLTCはエラーを通知します。 |
7 |
xsl:element要素またはxsl:attribute要素のname属性には属性値テンプレートを指定しないでください。 |
8 |
次の条件がすべて重なるとき,要素が属する名前空間が不正になります。
上記現象が発生するスタイルシートの例を次に示します。 <xsl:template match="/"> <xsl:element name="child1" namespace="AAA"> <xsl:element name="A:child2" namespace="XXX"> <xsl:attribute name="A:attr" namespace="AAA">1</xsl:attribute> </xsl:element> </xsl:element> </xsl:template> |
9 |
xsl:for-each要素のselect属性に述部を持つXPath式を指定する場合,述部に「ノードを比較対象とする式」を指定しないでください。この場合,スタイルシートを次のように変更してください。
スタイルシートの変更例を次に示します。 (変更前) <xsl:template match="/"> <xsl:for-each select="element[sub='x']"> <xsl:value-of select="."/> </xsl:for-each> </xsl:template> (変更後) <xsl:template match="/"> <xsl:for-each select="element"> <xsl:if test="sub='x'"> <xsl:value-of select="."/> </xsl:if> </xsl:for-each> </xsl:template> |
10 |
xsl:for-each要素のselect属性に「"descendant::node()"または"descendant-or-self::node()"を含むXPath式」を指定しないでください。要素ノードおよびテキストノードを選択する目的でこのようなXPath式を使用する場合は,スタイルシートを次のように変更してください。
|
11 |
xsl:if要素またはxsl:when要素のtest属性に「self軸と述部を両方持つXPath式」を指定しないでください。この場合,スタイルシートを次のように変更してください。
スタイルシートの変更例を次に示します。 (変更前) <xsl:template match="/element/sub"> <xsl:if test="self::sub[attribute::attr='x']"> <xsl:value-of select="."/> </xsl:if > </xsl:template> (変更後) <xsl:template match="/element/sub"> <xsl:if test="self::sub"> <xsl:if test="attribute::attr='x'"> <xsl:value-of select="."/> </xsl:if> </xsl:if > </xsl:template> |
12 |
xsl:import要素のhref属性の値が空文字列または空白だけの場合,errorイベントが発生し,エラーメッセージとして"null"が出力されます。 |
13 |
xsl:number要素のcount属性に"node()"を含むパターンを指定しないでください。要素ノードを番号付けする目的で"node()"を使用する場合は,代わりに"*"または"要素名"を使用してください。 |
14 |
xsl:number要素またはxsl:decimal-format要素のgrouping-separator属性に複数の空白文字列や1文字以上の文字列,または全角文字を指定した場合,エラーにはならず,指定した文字列で区切られた値が出力されます。 |
15 |
xsl:number要素のcount属性に"/"を指定した場合,XSLTでは"1"が出力されますが,XSLTCではjava.lang.VerifyErrorが発生します。 |
16 |
xsl:number要素のfrom属性に"/"を指定した場合,XSLTでは"1"が出力されますが,XSLTCではjava.lang.VerifyErrorが発生します。 |
17 |
xsl:output要素のdoctype-public属性には空文字列以外の文字列を指定してください。同様に,TransformerクラスのsetOutputPropertyメソッドを用いてdoctype-publicプロパティを設定する場合も,空文字列以外の文字列を指定してください。 |
18 |
xsl:processing-instruction要素のname属性に,処理命令のターゲット名として許されない"XML"を指定した場合,"<?XML?>"という不正な処理命令が出力されます。 |
19 |
xsl:sortのdata-type属性に不正な値"NUMBER"(大文字)を指定した場合,デフォルト動作("text"が指定された場合と同じ順序でソートする)が行われません。 |
20 |
xsl:sortのorder属性に不正な値"DESCENDING"(大文字)を指定した場合,デフォルト動作("ascending"が指定された場合と同じ順序でソートする)が行われません。 |
21 |
xsl:template要素のmatch属性に「"node()"を含み,かつ,その後ろにロケーションパスが続くXPath式」を指定しないでください。要素ノードを選択する目的で"node()"を使用する場合は,代わりに"*"を使用してください。スタイルシートの変更例を次に示します。 (変更前) <xsl:template match="/node()/sub"> <result><xsl:value-of select="."/></result> </xsl:template> (変更後) <xsl:template match="/*/sub"> <result><xsl:value-of select="."/></result> </xsl:template> |
22 |
xsl:template要素の子要素としてトップレベル要素を書いた場合,無視されずに有効な子要素として処理されます。 |
23 |
xsl:value-of要素のselect属性に,負のゼロを引数とするstring関数を記述した場合,XSLTでは"0"が出力されますが,XSLTCでは"-0"が出力されます。 |
24 |
xsl:variable要素の子要素にxsl:call-template要素を指定し,かつ,xsl:call-templateで呼び出されたテンプレート内に名前空間接頭辞を持つリテラル要素がある場合,xsl:copy-of要素でその変数が示す要素をコピーすると,要素の名前空間宣言が正しくコピーされません。 |
25 |
リテラル結果要素にxsl:extension-element-prefixes属性を指定して拡張要素とした場合,拡張要素の子要素として書かれたxsl:fallback要素が無視されます。代わりにxsl:stylesheet要素にextension-element-prefixes属性を指定してください。 |
26 |
スタイルシート内で仕様上,許されない場所に子要素を書いた場合(例:xsl:stylesheet要素の子要素としてリテラル要素を書いた場合,xsl:namespace-alias要素の子要素としてxsl:text要素が現れた場合など),エラーにはならないで,不正な子要素が無視されます。 |