次の方法で共有


XslTransform クラスの随意動作の実装

随意動作とは、『XSL Transformations (XSLT) Version 1.0 Recommendation』に示されている動作です。この勧告では、1 つの問題に対処する方法として、実装プロバイダが複数の有効なオプションから 1 つ選択することが随意動作として説明されています。たとえば、W3C Recommendation は、セクション 7.3 「Creating Processing Instructions」で、xsl:processing-instruction の内容をインスタンス化したときに、テキスト ノード以外のノードが作成されるのはエラーであるとしています。いくつかの問題に関しては、プロセッサがエラー状態から回復するときにどのような対処をするべきかを、W3C が規定しています。セクション 7.3 に記述されている問題に関しては、W3C では、作成されたノードとその内容を無視することで、このエラーから回復できるとしています。

W3C で許可されている各随意動作に関して、XslTransform クラスの .NET 実装での動作と、それぞれの問題について言及している『XSL Transformations (XSLT) Version 1.0 Recommendation』 (http://www.w3.org/TR/xslt) のセクションを次の表に示します。

問題 動作 セクション
テキスト ノードが xsl:strip-spacexsl:preserve-space の両方に適合している。 復元 3.4
ソース ノードが複数のテンプレート規則に適合している。 復元 5.5
1 つの名前空間 URI が同じインポート優先順位を持つ複数の名前空間 URI のエイリアスとして宣言されている。 復元 7.1.1
属性値テンプレートから生成された xsl:attributexsl:element 内の名前属性が有効な QName ではない。 例外をスロー 7.1.2 および 7.1.3
要素ノードに子ノードが既に追加されているにもかかわらず、その要素に属性が追加される。 復元 7.1.3
要素ノード以外のノードに属性が追加される。 復元 7.1.3
xsl:attribute 要素の内容をインスタンス化してもテキスト ノードが作成されない。 復元 7.1.3
同じインポート優先順位および展開名を持つ 2 つの属性セットに同じ属性が含まれており、これらの属性セット以外に、同じ名前で優先順位の高い共通属性を含む属性セットがない。 復元 7.1.4
xsl:processing-instruction 名前属性が NCName と処理命令ターゲットのどちらも生成しない。 復元 7.3
xsl:processing-instruction の内容をインスタンス化すると、テキスト ノード以外のノードが作成される。 復元 7.3
xsl:processing-instruction の内容をインスタンス化した結果に文字列 "?>" が含まれている。 復元 7.3
xsl:comment の内容をインスタンス化した結果に文字列 "--" が含まれているか、結果が "-" で終了している。 復元 7.4
xsl:comment の内容をインスタンス化した結果、テキスト ノード以外のノードが作成される。 復元 7.4
変数バインディング要素内のテンプレートが属性ノードまたは名前空間ノードを返す。 復元 11.2
document 関数に渡された URI からのリソースの取得時にエラーが発生する。 例外をスロー 12.1
document 関数内の URI 参照にフラグメント ID が含まれており、その ID を処理するとエラーが発生する。 例外をスロー 12.1
同じ名前 (xls:outputcdata-section-elements 以外) を持つ複数の属性があり、これらの属性が同じインポート優先順位を持つ。 復元 16
プロセッサが xsl:output 要素の encoding 属性で指定されている文字エンコーディング値をサポートしない。 復元 16.1
disable-output-escaping がテキスト ノードに使用されており、そのテキスト ノードを使用して、結果ツリーにテキスト ノード以外のものが作成されている。 disable-output-escaping 属性を無視 16.4
出力エスケープが有効に設定されているテキスト ノードが結果ツリー フラグメントに含まれている場合に、そのフラグメントが数値や文字列に変換される。 無視 16.4
XSLT プロセッサが出力に使用しているエンコーディングで表すことができない文字に対して、出力エスケープが無効に設定される。 無視 16.4
要素に子または属性が追加された後で、その要素に名前空間ノードが追加される。 復元 正誤表 e25
xsl:number が NaN、無限、または 0.5 未満である。 復元 正誤表 e24
document 関数への 2 番目の引数ノード セットが空であり、URI 参照が相対 URI 参照である。 復元 正誤表 e14

正誤表は、『XSL Transformations (XSLT) Version 1.0 Specification Errata』 (http://www.w3.org/1999/11/REC-xslt-19991116-errata/) にあります。

カスタム定義の動作の実装

XslTransform クラス実装には固有の動作があります。ここでは、xsl:sort に対するプロバイダ固有の実装について説明し、XslTransform クラスでサポートされているオプション機能についても説明します。

xsl:sort

『XSL Transformations (XSLT) Version 1.0 Recommendation』では、変換を使用した並べ替えについて、考慮事項がいくつか示されています。その内容を次に示します。

  • 2 つの XSLT プロセッサの両方が勧告に準拠している場合でも、それらの並べ替え動作は異なることがあります。
  • すべての XSLT プロセッサが同じ言語をサポートするわけではありません。
  • 言語によっては、プロセッサが異なると、xsl:sort で指定されない限り、特定の言語に対する並べ替え動作が異なる場合があります。

XslTransform による変換の .NET Framework での実装について、各データ型に対して実装されている並べ替え動作を次の表に示します。

データ型 並べ替え動作
テキスト データは、共通言語ランタイム (CLR: Common Language Runtime) の String.Compare メソッドとカルチャ ロケールを使用して並べ替えられます。データ型が "テキスト" である場合、XslTransform クラスによる並べ替え動作は、CLR の文字列比較動作と同様です。
数値 数値は、XPath 番号として処理され、『XML Path Language (XPath) Version 1.0 Recommendation』のセクション 3.5 (www.w3.org/TR/xpath.html#numbers) で概説されている詳細に従って並べ替えられます。

サポートされているオプション機能

XSLT プロセッサがオプションで実装する機能を次に示します。これらの機能は、XslTransform クラスに実装されます。

機能 参照先 メモ
<xsl:text...> タグと <xsl:value-of...> タグの disable-output-escaping 属性 『XSL Transformations (XSLT) Version 1.0 Recommendation』 (www.w3.org/TR/xslt)

セクション 16.4

xsl:text 要素または xsl:value-of 要素が xsl:commentxsl:processing-instruction、または xsl:attribute のいずれかの要素で使用される場合、disable-output-escaping 属性は無視されます。

結果ツリー フラグメントがテキストを含み、そのテキストの出力がエスケープされた場合は、その結果ツリー フラグメントはサポートされません。

XmlReader オブジェクトまたは XmlWriter オブジェクトへの変換時には、disable-output-escaping 属性が無視されます。

参照

XslTransform クラスによる XSLT プロセッサの実装 | XslTransform クラスを使用した XSLT 変換 | 変換における XPathNavigator | 変換における XPathNodeIterator | XslTransform への XPathDocument の入力 | XslTransform への XmlDataDocument の入力 | XslTransform への XmlDocument の入力 | XslTransform クラス | XslTransform のメンバ