XmlReader による属性の読み取り

次の 3 つのノード タイプは、属性を持つことができます。

  • 要素
  • XmlDeclaration
  • DocumentType 宣言

要素の属性間を移動する操作は、XmlDeclaration または DocumentType 宣言の属性の値を読み取る操作とは異なります。

要素の属性の読み取り

"要素" ノードに位置しているときに MoveToAttribute メソッドを使用すると、要素の属性リスト全体にアクセスできます。MoveToAttribute を呼び出すと、NameNamespaceURIPrefix などのノード プロパティには、属性を格納している要素のプロパティではなく、その属性のプロパティが反映されます。

属性を常に要素に指定する必要はありません。DTD またはスキーマを使用すると、要素の属性の既定値を定義できます。たとえば、DTD に <!ATTLIST e a CDATA "123"> が含まれている場合は、XML ドキュメントで "e" 要素の "a" 属性が定義されていないと、"e" 要素の "a" 属性に "123" という値が割り当てられます。属性間を移動するメソッドを使用するとき、DTD またはスキーマから値を受け取る属性は、XML ストリームで値が設定された属性と同じように動作します。属性が値をどのように受け取ったかをプログラムで判定するには、IsDefault プロパティを使用する方法があります。IsDefault プロパティは、現在のノードが属性であり、その属性が XML ストリームで指定されたものではなく、DTD の既定の属性宣言から生成されたものである場合に true を返します。

メモ   使用するリーダーのタイプによっては、このプロパティが適用されない場合があります。

IsDefault プロパティから返される可能性のある値を次の表に示します。

XmlReader の実装 返される値
XmlTextReader DTD 情報が存在しないため、false
XmlValidatingReader 現在のノードが DTD またはスキーマに定義された既定値から生成された属性である場合は true。属性の値が明示的に XML ストリームに指定されていた場合は false
XmlNodeReader XmlDocument に DTD が定義されている場合は true。それ以外の場合は false
XsltReader XPath データ モデルには DTD 情報 (DOCTYPE ノード) が公開されないため、false

属性に位置している場合は、GetAttribute メソッドを使用して属性の値を取得します。

その他のノード タイプの属性

XmlTextReaderXmlValidatingReader は、ElementXmlDeclaration、および DocumentType ノードの属性だけを公開します。XmlDeclaration ノード タイプでは、XmlReader クラスを実装するとき、XmlDeclarationValue プロパティの文字列として VersionStandaloneEncoding の各プロパティが返されます。Value プロパティを string.Empty として返すことはできません。このプロパティが空の場合は、XmlDocument DOM クラスや、この情報に依存するその他のクラスは、XmlReader からの読み込みを行うことができません。

参照

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