XmlReader.ReadSubtree メソッド

定義

現在のノードおよびそのすべての子孫ノードを読み取るために使用できる、新しい XmlReader インスタンスを返します。

public:
 virtual System::Xml::XmlReader ^ ReadSubtree();
public virtual System.Xml.XmlReader ReadSubtree ();
abstract member ReadSubtree : unit -> System.Xml.XmlReader
override this.ReadSubtree : unit -> System.Xml.XmlReader
Public Overridable Function ReadSubtree () As XmlReader

戻り値

XmlReader

Initial に設定された新しい XML リーダーのインスタンス。 Read() メソッドを呼び出すと、ReadSubtree() メソッドを呼び出す前に処理対象だったノードに新しいリーダーが配置されます。

例外

このメソッドを呼び出すときに XML リーダーが要素に配置されていません。

  • または -

先行の非同期操作が完了する前に、XmlReader メソッドが呼び出されました。 この場合、「非同期操作が既に実行されています」というメッセージと共に InvalidOperationException がスローされます。

ReadSubtree メソッドを使用する方法の例を次に示します。

XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
using (XmlReader reader = XmlReader.Create("books.xml", settings)) {

  // Position the reader on the second book node
  reader.ReadToFollowing("Book");
  reader.Skip();

  // Create another reader that contains just the second book node.
  XmlReader inner = reader.ReadSubtree();

  inner.ReadToDescendant("Title");
  Console.WriteLine(inner.Name);

  // Do additional processing on the inner reader. After you
  // are done, call Close on the inner reader and
  // continue processing using the original reader.
  inner.Close();
}
Dim settings As New XmlReaderSettings()
settings.IgnoreWhitespace = True
Using reader As XmlReader = XmlReader.Create("books.xml", settings)

  ' Position the reader on the second book node.
  reader.ReadToFollowing("Book")
  reader.Skip()
                
  ' Create another reader that contains just the second book node.
  Dim inner As XmlReader = reader.ReadSubtree()
            
  inner.ReadToDescendant("Title")
  Console.WriteLine(inner.Name)

  ' Do additional processing on the inner reader. After you 
  ' are done, call Close on the inner reader and 
  ' continue processing using the original reader.
  inner.Close()

End Using

このトピックの例を実行するには、次の XML データを使用します。

<?xml version="1.0" encoding="utf-8" ?>
<Books>
  <Book>
    <Title>A Brief History of Time</Title>
  </Book>
  <Book>
    <Title>Principle Of Relativity</Title>
  </Book>
  <Book>
    <Title>Victory of Reason</Title>
  </Book>
  <Book>
    <Title>The Unicorn that did not Fail</Title>
  </Book>
  <Book>
    <Title>Rational Ontology</Title>
  </Book>
  <Book>
    <Title>The Meaning of Pizza</Title>
  </Book>
</Books>

注釈

ReadSubtree は、要素ノードでのみ呼び出すことができます。 サブツリー全体が読み取られた場合、メソッドの呼び出しは Read .false 新しい XML リーダーが閉じられると、元のリーダーがサブツリーのノードに EndElement 配置されます。 したがって、book 要素の開始タグでメソッドを呼び出 ReadSubtree した場合、サブツリーが読み取られ、新しい XML リーダーが閉じられた後、元の XML リーダーは book 要素の終了タグに配置されます。

新しいリーダーが閉じられるまで、元のリーダーの操作はしないようにします。 元のリーダーの操作はサポートされず、その動作は予見できません。

注意

このメソッドは ReadSubtree 、個別に操作できる XML データのコピーを作成するためのものではありません。 XML 要素の周囲に境界を作成するように設計されています。 これは、処理のためにデータを別のコンポーネントに渡し、コンポーネントがアクセスできるデータの量を制限する場合に便利です。 メソッドから返された XML リーダーを別の ReadSubtree アプリケーションに渡すと、アプリケーションは XML ドキュメント全体ではなく、その XML 要素にのみアクセスできます。

適用対象