次の方法で共有


データの一致と XmlWriter

更新 : November 2007

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 の書き方