XmlReader による属性の読み取り
次の 3 つのノード タイプは、属性を持つことができます。
- 要素
- XmlDeclaration
- DocumentType 宣言
要素の属性間を移動する操作は、XmlDeclaration または DocumentType 宣言の属性の値を読み取る操作とは異なります。
要素の属性の読み取り
"要素" ノードに位置しているときに MoveToAttribute メソッドを使用すると、要素の属性リスト全体にアクセスできます。MoveToAttribute を呼び出すと、Name、NamespaceURI、Prefix などのノード プロパティには、属性を格納している要素のプロパティではなく、その属性のプロパティが反映されます。
属性を常に要素に指定する必要はありません。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 メソッドを使用して属性の値を取得します。
その他のノード タイプの属性
XmlTextReader と XmlValidatingReader は、Element、XmlDeclaration、および DocumentType ノードの属性だけを公開します。XmlDeclaration ノード タイプでは、XmlReader クラスを実装するとき、XmlDeclaration の Value プロパティの文字列として Version、Standalone、Encoding の各プロパティが返されます。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 メンバ