XSLT エラーの解決
W3C 勧告『XSL Transformations (XSLT) Version 1.0』には、対処方法を実装者が決定できる事項があります。 このような事項は、随意動作と見なされています。 たとえば、XSLT 1.0 Recommendation は、セクション 7.3「Creating Processing Instructions」で、xsl:processing-instruction
の内容をインスタンス化したときに、テキスト ノード以外のノードが作成されるのはエラーであるとしています。 いくつかの問題に関しては、プロセッサがエラー状態から回復するときにどのような対処をするべきかを、XSLT 1.0 Recommendation が規定しています。 セクション 7.3 に記述されている問題に関しては、W3C では、作成されたノードとその内容を無視することで、このエラーから回復できるとしています。
随意動作
XSLT 1.0 Recommendation で許可されている随意動作と XslCompiledTransform クラスによるこれらの動作の処理方法を次の表に示します。
復元は、XslCompiledTransform クラスがこのエラーから回復することを示しています。 XsltArgumentList.XsltMessageEncountered イベントを使用すると、XSLT プロセッサのすべてのイベントを通知できます。
エラーは、この状態に対する例外が発生したことを示します。
詳細については、W3C の XSL Transformations (XSLT) Version 1.0 勧告に関するページと W3C の「XSL Transformations (XSLT) Version 1.0 Specification Errata」(XSL Transformations (XSLT) Version 1.0 仕様の正誤表) を参照してください。
XSLT の状態 | セクション | XslCompiledTransform の動作 |
---|---|---|
テキスト ノードが xsl:strip-space と xsl:preserve-space の両方に適合している。 |
3.4 | 復元 |
ソース ノードが複数のテンプレート規則に適合している。 | 5.5 | 復元 |
1 つの名前空間 URI が同じインポート優先順位を持つ複数の名前空間 URI のエイリアスとして宣言されている。 | 7.1.1 | 復元 |
属性値から生成された name と xsl:attribute 内の xsl:element 属性が QName ではない。 |
7.1.2, 7.1.3 | エラー* |
同じインポートおよび展開名を持つ 2 つの属性セットに共通の属性が含まれており、これらの属性セット以外に、同じ名前で優先順位の高い共通属性を含む属性セットがない。 | 7.1.4 | 復元 |
要素に子が既に追加されているにもかかわらず、その要素に属性が追加される。 | 7.1.3 | エラー* |
'xmlns' という名前を持つ属性が作成される。 | 7.1.3 | エラー* |
要素ではないノードに属性が追加される。 | 7.1.3 | エラー* |
xsl:attribute 属性の内容をインスタンス化する際にテキスト ノード以外のノードが作成される。 |
7.1.3 | エラー* |
name の xsl:processing-instruction 属性が NCName と処理命令ターゲットのどちらも生成しない。 |
7.3 | エラー* |
xsl:processing-instruction の内容をインスタンス化すると、テキスト ノード以外のノードが作成される。 |
7.3 | エラー* |
xsl:processing-instruction の内容をインスタンス化した結果に文字列 "?>" が含まれている |
7.3 | 復元 |
xsl:processing-instruction の内容をインスタンス化した結果に文字列 "--" が含まれているか、または "-" で終了している。 |
7.4 | 復元 |
xsl:comment の内容をインスタンス化した結果、テキスト ノード以外のノードが作成される。 |
7.4 | エラー* |
変数バインディング要素内のテンプレートが属性ノードまたは名前空間ノードを返す。 | 11.2 | エラー* |
document 関数に渡された URI からのリソースの取得時にエラーが発生する。 | 12.1 | Error |
document 関数内の URI 参照にフラグメント ID が含まれており、その ID を処理するとエラーが発生する。 | 12.1 | 復元* |
同じ名前とさまざまな値を持つ複数の属性があり、これらの属性が同じインポート優先順位を持つ xsl:output の名前付き cdata-section 要素にならない。 |
16 | 復元 |
プロセッサが xsl:output の encoding 属性のエンコーディングをサポートしない。 |
16.1 | 復元 |
テキスト ノードの出力エスケープが無効で、そのテキスト ノードが結果ツリーのテキスト ノード以外のもののために使用されている。 | 16.4 | 復元* |
出力エスケープが有効に設定されているテキスト ノードが結果ツリー フラグメントに含まれている場合に、そのフラグメントが数値や文字列に変換される。 | 16.4 | 復元* |
XSLT プロセッサが出力に使用しているエンコーディングで表すことができない文字に対して、出力エスケープが無効に設定される。 | 16.4 | 復元* |
要素に子または属性が追加された後で、その要素に名前空間ノードが追加される。 | errata 25 | エラー* |
value の xsl:number 属性が NAN、無限、または 0.5 未満である。 |
errata 24 | 復元 |
document 関数への 2 番目の引数ノード セットが空であり、URI 参照が相対 URI 参照である。 | errata 14 | 復元 |
* この動作は、XslTransform クラスの動作とは異なります。 詳細については、「XslTransform クラスの随意動作の実装」を参照してください。
関連項目
.NET