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 reader가 요소에 배치되지 않은 상태에서 이 메서드를 호출한 경우

또는

이전 비동기 작업이 완료되기 전에 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 문서에 액세스할 수 있습니다.

적용 대상