要素および属性のコンテンツの読み取り
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" にとどまります。 |
その他のすべての XmlNodeTypes は string.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" に位置します。 |
その他のすべてのノードは ReadOuterXml に string.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 メンバ