この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
ほとんどのCreateオーバーロードには、XmlReaderSettings オブジェクトを受け取るsettings
パラメーターが含まれています。 このオブジェクトを使用すると、次のことができます。
- XmlReader オブジェクトでサポートする機能を指定します。
- XmlReaderSettings オブジェクトを再利用して、複数のリーダーを作成します。 同じ設定を使用して、同じ機能を持つ複数のリーダーを作成できます。 または、 XmlReaderSettings インスタンスの設定を変更し、別の機能セットを使用して新しいリーダーを作成することもできます。
- 既存の XML リーダーに機能を追加します。 Create メソッドは、別のXmlReader オブジェクトを受け入れることもできます。 基になる XmlReader オブジェクトには、ユーザー定義リーダー、 XmlTextReader オブジェクト、または追加の機能を追加する別の XmlReader インスタンスを指定できます。
- 静的Createメソッドによって作成されたXmlReader オブジェクトでのみ使用できる XML 1.0 (第 4 エディション) の推奨事項に対する準拠チェックやコンプライアンスの向上などの機能を最大限に活用します。
注
.NET には、XmlTextReader、XmlNodeReader、XmlValidatingReader クラスなど、XmlReader クラスの具体的な実装が含まれていますが、Create メソッドを使用してXmlReaderインスタンスを作成することをお勧めします。
既定の設定
XmlReaderSettings オブジェクトを受け入れないCreate オーバーロードを使用する場合は、次の既定のリーダー設定が使用されます。
設定 | 既定値 |
---|---|
CheckCharacters | true |
ConformanceLevel | ConformanceLevel.Document |
IgnoreComments | false |
IgnoreProcessingInstructions | false |
IgnoreWhitespace | false |
LineNumberOffset | 0 |
LinePositionOffset | 0 |
NameTable | null |
DtdProcessing | Prohibit |
Schemas | 空の XmlSchemaSet オブジェクト |
ValidationFlags | ProcessIdentityConstraints 有効 |
ValidationType | None |
XmlResolver | null |
一般的なシナリオの設定
一般的な XML リーダー シナリオの一部に対して設定する必要がある XmlReaderSettings プロパティを次に示します。
要件 | オン |
---|---|
データは整形式の XML ドキュメントである必要があります。 | ConformanceLevel から Document。 |
データは、整形式の XML 解析エンティティである必要があります。 | ConformanceLevel から Fragment。 |
データは DTD に対して検証する必要があります。 |
DtdProcessing から Parse へ ValidationType から DTD。 |
データは XML スキーマに対して検証する必要があります。 |
ValidationType から Schema へ Schemas 検証に使用する XmlSchemaSet 。 XmlReaderでは、XML-Data 削減 (XDR) スキーマ検証はサポートされていないことに注意してください。 |
インライン XML スキーマに対してデータを検証する必要があります。 |
ValidationType から Schema へ ValidationFlags から ProcessInlineSchema。 |
サポートを入力します。 |
ValidationType から Schema へ Schemas を使用する XmlSchemaSet に追加します。 |
XmlReader では、XML-Data 削減 (XDR) スキーマの検証はサポートされていません。
非同期プログラミング
同期モードでは、 Create メソッドは、ファイル、ストリーム、またはテキスト リーダーのバッファーからデータの最初のチャンクを読み取ります。 I/O 操作が失敗すると、例外がスローされる可能性があります。 非同期モードでは、最初の I/O 操作は読み取り操作で発生するため、発生した例外は読み取り操作の発生時にスローされます。
セキュリティに関する考慮事項
既定では、 XmlReader はユーザー資格情報のない XmlUrlResolver オブジェクトを使用してリソースを開きます。 つまり、既定では、XML リーダーは資格情報を必要としない任意の場所にアクセスできます。 XmlResolver プロパティを使用して、リソースへのアクセスを制御します。
- XmlResolverを XmlSecureResolver オブジェクトに設定して、XML リーダーがアクセスできるリソースを制限します。...
- を に設定すると、XML リーダーが外部リソースを開けなくなります。
例示
この例では、重要でない空白を削除し、コメントを削除して、フラグメント レベルの準拠チェックを実行する XML リーダーを作成します。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);
Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
次の例では、既定の資格情報を持つ XmlUrlResolver を使用してファイルにアクセスします。
// Set the reader settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
' Set the reader settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.IgnoreComments = true
settings.IgnoreProcessingInstructions = true
settings.IgnoreWhitespace = true
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
次のコードは、別のリーダー内のリーダー インスタンスをラップします。
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);
Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
この例では、リーダーをチェーンして DTD と XML スキーマの検証を追加します。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings); // XML Schema Validation
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings) ' XML Schema Validation
.NET