要素および属性のコンテンツの読み取り

XmlReader には、要素と属性のコンテンツを 1 回の呼び出しで読み取るために、ReadInnerXml メソッドおよび ReadOuterXml メソッドが用意されています。ノードに位置している場合、ReadInnerXml プロパティは、要素タグの直後から要素の終了タグまで、そのノードのすべてのコンテンツをマークアップを含めて取得します。ReadInnerXml の呼び出し後、XmlReader は終了要素タグの直後の位置に移動します。次の XML 入力を仮定します。

入力

<Book>
 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />
</Book>

リーダーが Book 要素に位置しているときに ReadInnerXml を呼び出すと、次の出力が返されます。

 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />

ReadInnerXml は、要素の終了タグが読み込まれた後に、リーダーの位置を設定します。つまり、上の入力の場合は、</Book> 終了要素の次のノードが現在のノードになります (ノードが存在する場合)。その後、Read メソッドを実行すると、1 つ先の要素に進みます。ReadInnerXml を呼び出した後の、ストリームの現在のノードを示すコード例を次に示します。この例は、ReadInnerXml によってリーダーを別のノードに進めた後で Read を実行する方法も示しています。

public static void Main() 
{
    string text = @"<book><one><title>ABC</title></one><two><price>24.95</price></two></book>";
    XmlTextReader reader = new XmlTextReader(new StringReader(text));
    reader.WhitespaceHandling = WhitespaceHandling.None;

    // Moves the reader to the 'book' node.
    reader.MoveToContent(); 

    // Moves the reader to the 'one' node.
    reader.Read(); 
    reader.MoveToContent();

    // Reads the inner XML of the 'one' node, which is the entire 'title'
    // node, and outputs <title>ABC</title>. 
    Console.WriteLine(reader.ReadInnerXml()); 

    // The reader is now positioned on the 'two' node.
    Console.WriteLine(reader.Name);

    // Calling Read will advance the reader beyond the 'two' node to 
    // the 'price' node.
    reader.Read();
    // Outputs the node of 'price'.
    Console.WriteLine(reader.Name);
}

コードの出力は次のとおりです。

<title>ABC</title>

two

price

ReadInnerXml は XML を解析し、XmlNodeType に従ってコンテンツを返します。要素と属性のコンテンツのサンプル、ReadInnerXml の呼び出しから返される値、および呼び出し後のリーダーの位置を次の表に示します。

ノード タイプ 子のコンテンツ 戻り値 位置
要素 <myelem> text </myelem> text 終了要素 </myelem> の次のノードに位置します。
属性 <myelem attr1="val1" attr2="val2"> text </myelem> val1 属性ノード "attr1" にとどまります。

その他のすべての XmlNodeTypesstring.Empty を返します。

ReadOuterXml メソッドの動作は、戻り値に開始タグと終了タグが含まれることを除いて ReadInnerXml メソッドとほとんど同じです。葉ノードに位置している場合は、ReadOuterXml メソッドは Read 操作と同じです。

ReadOuterXml は XML を解析し、現在の XmlNodeType に従ってさまざまな子のコンテンツを返します。要素と属性のコンテンツのサンプル、ReadOuterXml の呼び出しから返される値、呼び出し後のリーダーの位置を次の表に示します。

ノード タイプ 子のコンテンツ 戻り値 位置
要素 <elem1> text </elem1> <elem1> text </elem1> </elem1> タグの次に位置します。
属性 <elem1 attr1="attrValue1" attr2="attrValue2" > text </elem1> attr1="attrValue1" 属性ノード "attr1" に位置します。

その他のすべてのノードは ReadOuterXmlstring.Empty を返します。

参照

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