次の方法で共有


XmlReader による XML の読み取り

XmlReader クラスは、非キャッシュ、前方参照専用、読み取り専用のアクセスを提供する抽象基本クラスです。XmlReader クラスは、XML が整形式であることをチェックし、エラーを検出すると XmlExceptions をスローします。XmlReader クラスは、ストリームまたはドキュメントを読み取ることができ、www.w3.org/TR/REC-xml-names にある W3C の勧告に概説されている名前空間要件を実装します。

XmlReader は抽象クラスであるため、独自のタイプのリーダーをカスタマイズしたり、XmlTextReaderXmlValidatingReader、および XmlNodeReader クラスの現在の実装を拡張できます。ただし、.NET Framework Version 1.1 で XmlReader に実装されているセキュリティ制約により、XmlTextReaderXmlValidatingReader を継承する機能は制限されます。.NET Framework Version 1.0 では、どのコンポーネントも XmlTextReader または XmlValidatingReader を継承できます。.NET Framework Version 1.1 では、XmlTextReaderXmlValidatingReader のコンストラクタに継承確認要求が実装されたため、XmlTextReader または XmlValidatingReader を継承できるコンポーネントは、信頼されているコンポーネントだけになりました。

また、XmlReader は、XML からのデータの取得や不要なレコードのスキップを可能にするメソッドを定義します。XmlReader は、プッシュ モデルの SAX とは異なります。SAX には、アプリケーションにイベントをプッシュするパーサーが搭載されています。SAX との比較の詳細については、「XmlReader と SAX リーダーの比較」を参照してください。

XmlReader クラスには、次の処理を実行するメソッドがあります。

  • XML テキスト ファイルなど、コンテンツ全体が含まれている XML からのコンテンツの読み込み
  • XML 要素スタックの深さの検出
  • 要素にコンテンツが含まれているかどうかの判定
  • 属性の読み取りと移動
  • 要素とそのコンテンツのスキップ

XmlReader クラスには、次の情報を返すプロパティがあります。

  • 現在のノードの名前と種類
  • 現在のノードのコンテンツ

基本クラスを拡張する XmlReader クラスの実装は、サポートするシナリオのニーズによってデザインが異なります。XmlReader クラスの実装の説明を次の表に示します。

クラス 説明
XmlTextReader クラス 文字ストリームを読み取ります。これは前方参照専用のリーダーであり、コンテンツとノード タイプのデータを返すメソッドが用意されています。ドキュメント型定義 (DTD) またはスキーマのサポートはありません。
XmlNodeReader クラス XmlNode ツリーのような XML ドキュメント オブジェクト モデル (DOM) API に対してパーサーを提供します。XmlNode を受け取り、DOM ツリーで検出されたすべてのノードを、エンティティ参照ノードも含めて返します。DTD またはスキーマ検証のサポートはありませんが、DTD で定義されたエンティティを解決できます。
XmlValidatingReader クラス DTD、XML スキーマ定義言語 (XSD) スキーマ、または XML-Data Reduced (XDR) スキーマをサポートする、標準に完全に準拠した検証または非検証 XML パーサーを提供します。XmlTextReader を受け取り、その上位に検証サービス層を作成します。
カスタマイズされた XML リーダーの作成 開発者が XmlReader の派生クラスを定義できます。

メモ   XmlTextReaderXmlValidatingReader には、読み込むファイルのサイズに制限があります。2 ギガバイトを超えるファイルは読み込むことができません。その場合は、可能であれば、ソース ファイルを複数の小さなファイルに分割します。

別の実装として、パブリック コンストラクタを持たない XsltReader があります。XsltReader は、XslTransform クラスの Transform メソッドを呼び出した結果として作成されます。XsltReader には次の機能があります。

  • XML は整形式でなければならないという規則を適用します。
  • DTD またはスキーマによる検証は行いません。
  • XPath データ モデルでは DTD 情報 (DOCTYPE ノード) が公開されないため、既定の属性は展開されません。XmlReader.IsDefault プロパティを参照してください。変換の適用前にソース ドキュメントの既定の属性を展開する必要がある場合は、XmlValidatingReader をとおしてデータ ストア (たとえば XmlDocument) を読み込む必要があります。

XmlTextReaderXmlValidatingReaderXmlNodeReader の各クラスは、それぞれ異なるシナリオをサポートするようにデザインされています。各シナリオに適したリーダーと、ValidationType プロパティに設定する値を次の表に示します。

シナリオ 使用するリーダー ValidationType プロパティ
高いパフォーマンスを必要とし、DTD やスキーマのサポートを必要としない場合。 XmlTextReader 使用できません。
DTD で提供される外部エンティティと DocType も含め、XML が整形式になっている必要がある場合。 XmlTextReader 使用できません。
DTD に従って、XML が有効で整形式になっている必要がある場合。 XmlValidatingReader Auto または DTD
XML が整形式になっている必要があり、スキーマに対する検証が必要な場合。 XmlValidatingReader DTD がない場合、または XDR スキーマの場合は Auto
XmlNode から XML データをストリーム転送するとき、XML が整形式になっている必要がある場合。 XmlNodeReader 使用できません。

それぞれのシナリオを実現するために、各種リーダーの XmlResolver プロパティと XmlTextReader.Normalization プロパティを設定する方法を次の表に示します。

Normalization プロパティが true に設定されている場合は、テキスト内の行末文字と空白ノードが正規化され、属性値も型に応じて正規化されます。その結果、Normalization プロパティを true に設定すると、既定値の false のときよりもパフォーマンスが低下します。詳細については、「Normalization プロパティ」を参照してください。

外部 DTD など、URI で指定された外部リソースを解決したり、スキーマを検索するには、XmlResolver プロパティを使用します。別のリーダーで XmlResolver プロパティを使う方法の詳細については、「XmlResolver を使用したリソースの解決」を参照してください。

シナリオ XmlResolver Normalization プロパティ
高いパフォーマンスを必要とし、DTD やスキーマのサポートを必要としない場合。 null 参照に設定します。詳細については、「XmlResolver プロパティ」を参照してください。 false に設定します。
DTD で提供される外部エンティティと DocType も含め、ドキュメントが整形式になっている必要がある場合。 非 null 参照に設定します。すべての外部エンティティは解決可能である必要があります。詳細については、「XmlResolver プロパティ」を参照してください。 true に設定します。
ドキュメントが整形になっている必要があり、DTD に従って XML が有効でなければならない場合。 非 null 参照に設定します。すべての外部エンティティは解決可能である必要があります。詳細については、「XmlResolver プロパティ」を参照してください。 XmlValidatingReader に渡す前に、XmlTextReadertrue に設定します。
ドキュメントが整形式になっている必要があり、スキーマ検証が必要な場合。 非 null 参照に設定します。すべての外部エンティティは解決可能である必要があります。詳細については、「XmlResolver プロパティ」を参照してください。 XmlValidatingReader に渡す前に、XmlTextReadertrue に設定します。
XmlNode から XML データをストリーム転送するとき、XML が整形式になっている必要がある場合。 使用できません。 使用できません。

XmlValidatingReader は、XmlTextReader に対して検証サービスを提供します。詳細については、「XmlValidatingReader を使用した XML の検証」を参照してください。

参照

XmlReader における現在のノードの位置 | XmlReader のプロパティ設定 | XmlReader と XmlNameTable によるオブジェクトの比較 | XmlReader による属性の読み取り | 要素および属性のコンテンツの読み取り | XmlReader によるコンテンツのスキップ | EntityReference の読み取りと展開 | XmlReader と SAX リーダーの比較 | XmlTextReader による XML データの読み取り | XmlNodeReader によるノード ツリーの読み取り | XmlValidatingReader による XML の検証 | カスタマイズされた XML リーダーの作成 | XmlReader クラス | XmlReader メンバ | XmlNodeReader クラス | XmlNodeReader メンバ | XmlTextReader クラス | XmlTextReader メンバ | XmlValidatingReader クラス | XmlValidatingReader メンバ