System.Xml.XmlReader.Create メソッド

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

Createほとんどのオーバーロードには、オブジェクトをsettings受け入れるパラメーターがXmlReaderSettings含まれています。 このオブジェクトを使用すると、次のことができます。

  • オブジェクトでサポートする機能を XmlReader 指定します。
  • オブジェクトを再利用して複数の XmlReaderSettings リーダーを作成します。 同じ機能を持つ複数のリーダーの作成に、同じ設定を使用できます。 または、インスタンスの XmlReaderSettings 設定を変更し、別の機能セットを使用して新しいリーダーを作成することもできます。
  • 既存の XML リーダーに機能を追加します。 Create メソッドは別の XmlReader オブジェクトを受け取ることができます。 基になる XmlReader オブジェクトには、ユーザー定義リーダー、オブジェクト、 XmlTextReader または追加の機能を追加する別 XmlReader のインスタンスを指定できます。
  • 静的Createメソッドによって作成されたオブジェクトでのみ使用できる XML 1.0 (第 4 エディション) の推奨事項に対する、より適切な準拠チェックやコンプライアンスなどの機能を最大限にXmlReader活用します。

Note

.NET には、クラスのXmlReader具象実装 (,XmlNodeReader、、XmlValidatingReaderクラスなどXmlTextReader) が含まれていますが、メソッドを使用して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

一般的なシナリオの設定

XmlReaderSettings一般的な XML リーダー シナリオの一部に対して設定する必要があるプロパティを次に示します。

要件 Set
データは整形式の XML ドキュメントである必要があります。 ConformanceLevel から Document
データは、整形式の XML 解析エンティティである必要があります。 ConformanceLevel から Fragment
データは DTD に対して検証する必要があります。 DtdProcessingParse
ValidationType から DTD
データは XML スキーマに対して検証する必要があります。 ValidationTypeSchema
Schemas 検証に XmlSchemaSet 使用する に設定します。 XmlReader XML-Data Reduced (XDR) スキーマ検証はサポートされていないことに注意してください。
インライン XML スキーマに対してデータを検証する必要があります。 ValidationTypeSchema
ValidationFlags から ProcessInlineSchema
サポートを入力します。 ValidationTypeSchema
SchemasXmlSchemaSetを使用します。

XmlReader では、XML-Data Reduced (XDR) スキーマの検証はサポートされていません。

非同期プログラミング

同期モードでは、メソッドは Create ファイル、ストリーム、またはテキスト リーダーのバッファーからデータの最初のチャンクを読み取ります。 I/O 操作が失敗すると、例外がスローされる可能性があります。 非同期モードでは、最初の I/O 操作は読み取り操作で発生するため、発生した例外は読み取り操作の発生時にスローされます。

セキュリティに関する考慮事項

既定では、 XmlReader ユーザー資格情報のないオブジェクトを XmlUrlResolver 使用してリソースを開きます。 つまり、既定では、XML リーダーは資格情報を必要としない任意の場所にアクセスできます。 このプロパティを XmlResolver 使用して、リソースへのアクセスを制御します。

  • XML リーダーがXmlSecureResolverアクセスできるリソースを制限するオブジェクトに設定XmlResolverします。...
  • null XML リーダーが外部リソースを開かないように設定XmlResolverします。

この例では、重要でない空白を削除し、コメントを削除し、フラグメント レベルの準拠チェックを実行する 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