XmlReader によるデータ一致チェック

Create メソッドによって作成される XmlReader オブジェクトは、既定で XmlTextReader 実装よりも適合性があります。Create メソッドによって作成される XmlReader オブジェクトは、既定で次の機能をサポートします。

  • 改行文字の正規化

  • エンティティの展開

  • 既定の属性の追加

XmlReaderSettings.CheckCharacters および XmlReaderSettings.ConformanceLevel プロパティによって、作成された XmlReader オブジェクトに対して有効にする一致チェックの種類を指定できます。

CheckCharacters 設定

XmlReaderSettings クラスの CheckCharacters プロパティはリーダーに対して、文字をチェックし、文字が有効な XML 文字の範囲から外れる場合は XmlException をスローするように指示します。文字チェックが有効な場合は、以下が保証されます。

  • ドキュメント内の文字はすべて W3C 勧告『XML 1.0』で定義されている有効な XML 文字の範囲内です。

  • すべての XML 名は有効です。たとえば、要素の名前が数字で始まる場合は、XmlException がスローされます。詳細については、http://www.w3.org/TR/REC-xml#NT-Name を参照してください。

既定で文字チェックは有効です。CheckCharacters プロパティが false に設定されている場合でも、テキスト データの処理中、リーダーは常に XML 名が有効なことをチェックします。

ConformanceLevel の設定

XmlReaderSettings クラスの ConformanceLevel プロパティを設定すると XmlReader が読み込むストリームが、一定の規則群に準拠していることがチェックされ、保証されます。指定された一致レベルに応じて、XML データが整形式の XML 1.0 ドキュメントの規則、またはドキュメント フラグメントの規則に一致しているかどうかをチェックすることができます。データが一致していない場合、XmlException がスローされます。既定の設定は ConformanceLevel.Document です。

注意

リーダーが ConformanceLevel.Fragment をサポートするように設定されているにもかかわらず、XML データにドキュメント型定義 (DTD) が含まれている場合は、XmlException がスローされます。XML 1.0 勧告では、DTD がある場合にはドキュメント レベルの一致が必要です。

ConformanceLevel 値

説明

Document

XML データは、整形式の XML 1.0 ドキュメントの規則に準拠します。このレベルのチェックでは、すべてのプロセッサで、読み込むストリームが XML 1.0 ドキュメントとして処理できることが保証されます。

リーダーは以下をチェックします。

  • 最上位項目が、XML 宣言、ドキュメント型定義 (DTD)、要素、コメント、空白、または処理命令以外のノードを持たない。

  • XML データが厳密に 1 つの要素ノードを持つ。

Fragment

XML データは、整形式の XML 1.0 ドキュメント フラグメントの規則に準拠します。

この設定では、複数のルート要素を持つ XML データやトップレベルのテキスト ノードが受け入れられます。このレベルのチェックでは、すべてのプロセッサで、読み込むストリームが XML 1.0 の外部解析対象エンティティとして処理できることが保証されます。

メモメモ
フラグメント内に DTD は許可されていません。

Auto

リーダーが、入力データに応じて適用する一致チェック レベルを決定します。

XML データに DTD 情報が含まれている場合、ドキュメントの一致チェックが適用されます。

XML データに次のいずれかが含まれている場合、フラグメントの一致チェックが適用されます。

  • ルート レベルのテキスト、CDATA、またはエンティティ参照ノード。

  • ルート レベルの複数の要素。

  • ルート レベルに要素がない。

ルート レベルにテキスト ノードと DTD があるなどの矛盾がある場合には XmlException がスローされます。

この設定は、既存の XmlReader に追加機能を追加するために Create メソッドが使われた場合のラップ シナリオで使用することができます。この場合、ConformanceLevel.Auto によって一致チェックは何も追加されません。一致チェックはラップされている XmlReader に任されます。

6bts1x50.collapse_all(ja-jp,VS.110).gifXmlTextReader、XmlValidatingReader、および XmlNodeReader オブジェクト

XmlTextReaderXmlValidatingReader、または XmlNodeReader オブジェクトの使用時に、ConformanceLevel 設定は次のとおり作用します。

  • XmlReader オブジェクトが Create メソッドによって作成されたのではない場合、一致レベルとして Document が想定されます。その結果、新しい XmlReader オブジェクトの作成時に、この XmlReader インスタンスを別の XmlReader オブジェクト内にラップする場合、指定する一致レベルは、Document または Auto にする必要があります。

  • 基になる XmlTextReader または XmlValidatingReader オブジェクトが XmlParserContext オブジェクトと XmlNodeType.Element を使用して作成された場合、Fragment 設定も適用できます。

次のコードでは、フラグメントレベルの一致を強制するリーダーを作成します。

Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
Dim reader as XmlReader = XmlReader.Create(new StringReader(xmlString), settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);

参照

概念

XmlReader による XML の読み取り

その他の技術情報

XmlReader による XML データの検証