NIB: データの一致と XmlWriter

XmlWriter クラスには 2 つの一致チェックの設定があります。XmlWriter を設定して、出力されるデータが一致していることをチェックできます。

CheckCharacters 設定

XmlWriterSettings.CheckCharacters プロパティはライターに対して、文字をチェックし、文字が有効な XML 文字の範囲から外れる場合は XmlException をスローするように指示します。文字のチェックが有効な場合は、ドキュメント内の文字がすべて W3C 勧告『XML 1.0』で定義されている有効な XML 文字であると確認できます。

注意

文字チェックには、XML 名の文字に無効な文字が含まれていないか、またはすべての XML 名が有効かどうかのチェックは含まれません。名前のチェックは、一致チェックの標準部分に含まれます。詳細については http://www.w3.org/TR/REC-xml#NT-Name を参照してください。

既定で文字チェックは有効です。

ConformanceLevel の設定

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

注意

ライターが ConformanceLevel.Fragment をサポートするように設定されているにもかかわらず、XML データにドキュメント型定義 (DTD) が含まれている場合は、ライターは例外をスローします。XML 1.0 勧告では、DTD がある場合にはドキュメント レベルの一致が必要です。そのため、ConformanceLevel.Fragment をサポートするように設定されたライターで WriteStartDocument メソッドが呼び出されても、ライターは例外をスローします。

一致レベル

説明

Document

この設定では、出力が整形式の XML 1.0 ドキュメントの規則に準拠し、準拠するすべてのプロセッサで処理可能なことが保証されます。

メモメモ
ライターは書き出す DTD 情報を解析しません。ユーザーは DTD が整形式であることを保証する必要があります。

Fragment

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

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

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

Auto

ライターが、入力データに応じて適応する一致チェック レベルを決定します。この設定は、生成された XML が整形式の XML ドキュメントであるかフラグメントであるか不明のときに役立ちます。

ドキュメントの一致チェックは、次の場合に適用されます。

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

  • ルート レベルのテキスト、CDATA、または EntityReference ノード。

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

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

テキスト ノードを書き出そうとしてルート レベルに DTD があるなどの矛盾がある場合には XmlException がスローされます。

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

参照

その他の技術情報

XmlWriter による XML の書き方