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

반품

새 XML 판독기 인스턴스가 .로 설정됩니다 Initial. 메서드를 호출하면 Read() 메서드를 호출하기 전에 현재 노드에 새 판독기를 배치합니다 ReadSubtree() .

예외

이 메서드를 호출할 때 XML 판독기는 요소에 배치되지 않습니다.

-또는-

XmlReader 이전 비동기 작업이 완료되기 전에 메서드가 호출되었습니다. 이 경우 InvalidOperationException "비동기 작업이 이미 진행 중입니다."라는 메시지와 함께 throw됩니다.

예제

다음 예제에서는 메서드를 사용하는 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 배치됩니다. 따라서 책 요소의 시작 태그에서 메서드를 호출 ReadSubtree 한 경우 하위 트리를 읽고 새 XML 판독기를 닫은 후 원래 XML 판독기는 책 요소의 끝 태그에 배치됩니다.

새 판독기를 닫을 때까지 원래 판독기에서 작업을 수행해서는 안 됩니다. 이 작업은 지원되지 않으며 예측할 수 없는 동작이 발생할 수 있습니다.

메모

이 메서드는 ReadSubtree 독립적으로 작업할 수 있는 XML 데이터의 복사본을 만들기 위한 것이 아닙니다. XML 요소 주위에 경계를 만들도록 설계되었습니다. 이 기능은 처리를 위해 다른 구성 요소에 데이터를 전달하고 구성 요소에서 액세스할 수 있는 데이터의 양을 제한하려는 경우에 유용합니다. 메서드에서 반환된 XML 판독기를 다른 애플리케이션에 ReadSubtree 전달하면 애플리케이션은 전체 XML 문서가 아닌 해당 XML 요소에만 액세스할 수 있습니다.

적용 대상