属性値の正規化
XmlTextReader クラスの Normalization プロパティでは、パーサーが空白の正規化と属性の正規化を実行するかどうかを指定します。非検証型パーサーで設定されるこのプロパティは、www.w3.org/TR/2000/REC-xml-20001006.html#AVNormalize で公開されている W3C (World Wide Web Consortium) 勧告『Extensible Markup Language (XML) Version 1.0』のセクション「Attribute-Value Normalization」で定義されています。Normalization プロパティの既定の設定は false です。false に設定されていると、このフラグによって数値エンティティの文字範囲チェックもオフになるため、XmlTextReader では � のような文字エンティティが許容されます。
注意
.NET Framework 2.0 では、XmlReaderSettings クラスと Create メソッドを使って XmlReader インスタンスを作成する方法を推奨しています。この方法に従えば、.NET Framework 2.0 で導入されたすべての新しい機能を利用できます。詳細については、「XML リーダーの作成」を参照してください。
Create メソッドを使用して作成された XmlReader インスタンスは、常に新しい行と属性値を XML 仕様に基づいて正規化します。
正規化
W3C の勧告によると、属性の値は、アプリケーションに渡す前、またはその有効性をチェックする前に、次のように正規化する必要があると規定されています。
文字参照については、参照されている文字を属性値に追加します。
エンティティ参照については、エンティティの置換テキストを再帰的に処理します。
空白文字 (#x20、#xD、#xA、#x9) については、正規化された値に #x20 を追加します。例外は外部解析対象エンティティの一部または内部解析対象エンティティのリテラル エンティティ値である "#xD#xA" シーケンスで、その場合は 1 つの #x20 のみを追加します。
その他の文字は、正規化された値にそのまま追加します。
宣言された値が CDATA でない場合は、前後の空白 (#x20) 文字を破棄し、空白 (#x20) 文字の連続を 1 つの空白 (#x20) 文字に置き換えます。