XmlTextReader は、XML データのストリームへの前方向の読み取り専用アクセスを提供します。現在のノードは、リーダーが配置されているノードを参照します。リーダーは読み取りメソッドを使用して進み、プロパティには現在のノードの値が反映されます。
このクラスは XmlReader を実装し、W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠しています。XmlTextReader は、次の機能を提供します。
-
整形式の XML の規則を適用します。
-
XmlTextReader は、データ検証を提供しません。
-
DocumentType ノードが整形式かどうかを確認します。XmlTextReader は、DTD が整形式かどうかを確認しますが、DTD を使用した検証は行いません。
-
NodeType が XmlNodeType.EntityReference であるノードの場合は、単一の空の EntityReference ノードが返されます。つまり、Value プロパティは String.Empty です。
メモ |
|---|
| DTD 内のエンティティの実際の宣言は、Entity ノードと呼ばれます。これらのノードをデータで参照するときは、EntityReference ノードと呼ばれます。 |
XmlTextReader は、データ検証に必要な補足チェックを実行しないため、高速の整形式パーサーを提供します。
データ検証を実行するには、検証 XmlReader を使用します。詳細については、「XmlReader による XML データの検証」を参照してください。
XmlDocument から XML データを読み取るには、XmlNodeReader を使用します。
XmlTextReader は、XML 解析エラー時に XmlException をスローします。例外がスローされると、リーダーの状態は予測不可能になります。たとえば、報告されたノード型が、現在のノードの実際のノード型と異なる場合があります。リーダーがエラー状態にあるかどうかを確認するには、ReadState プロパティを使用します。
XmlReader クラスの詳細については、「XmlReader による XML の読み取り」を参照してください。
セキュリティについての考慮事項
XmlTextReader クラスを使用する際の考慮事項を次に示します。
-
XmlTextReader で例外がスローされると、本来アプリケーションには表示されてはならないパス情報が開示されてしまう可能性があります。アプリケーションで例外をキャッチし、適切に処理する必要があります。
-
既定では、DTD 処理が有効になります。サービス拒否攻撃が懸念される場合や、信頼関係のないソースを扱う場合は、DTD 処理を無効にしてください。DTD 処理を無効にするには、ProhibitDtd プロパティを true に設定します。
DTD 処理を有効にした場合、XmlTextReader でアクセスできるリソースを、XmlSecureResolver を使って制限できます。また、XML 処理に対するメモリと時間の割り当てが制限されるようにアプリケーションをデザインすることもできます。たとえば、ASP.NET アプリケーションにタイムアウトの制限を設定します。
-
XML データには、DTD ファイルなど、外部リソースへの参照が含まれている場合があります。既定では、ユーザー資格情報を持たない XmlUrlResolver を使って外部リソースが解決されます。この点については、次のいずれかの方法でセキュリティを強化できます。
-
XML データに大量の属性、名前空間宣言、入れ子にされた要素が含まれると、処理に膨大な時間を要する場合があります。XmlTextReader に送られる入力のサイズを制限するには、カスタムの IStream 実装を作成して、XmlTextReader に適用するようにします。
-
ReadValueChunk メソッドを使用すると、大量のデータ ストリームを処理できます。このメソッドは、値全体に対して単一の文字列を割り当てる代わりに、一度に少数の文字を読み込みます。
-
既定では、一般エンティティが展開されません。一般エンティティは、ResolveEntity メソッドが呼び出されたときに展開されます。
継承時の注意
このクラスには継承確認要求があります。
XmlTextReader から継承するには、完全信頼が必要です。詳細については、「
継承確認要求」を参照してください。