XPathNavigator.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

一个 XmlReader 对象,该对象包含当前节点及其子节点。

例外

XPathNavigator 未定位在元素节点或根节点上。

示例

以下示例演示了对文件的第一个book元素contosoBooks.xml使用ReadSubtree方法。

XPathDocument^ document = gcnew XPathDocument("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

navigator->MoveToChild("bookstore", "http://www.contoso.com/books");
navigator->MoveToChild("book", "http://www.contoso.com/books");

XmlReader^ reader = navigator->ReadSubtree();

while (reader->Read())
{
    Console::WriteLine(reader->ReadInnerXml());
}

reader->Close();
XPathDocument document = new XPathDocument("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");

XmlReader reader = navigator.ReadSubtree();

while (reader.Read())
{
    Console.WriteLine(reader.ReadInnerXml());
}

reader.Close();
Dim document As XPathDocument = New XPathDocument("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")

Dim reader As XmlReader = navigator.ReadSubtree()

While reader.Read()
    Console.WriteLine(reader.ReadInnerXml())
End While

reader.Close()

该示例使用 contosoBooks.xml 文件作为输入。

<?xml version="1.0" encoding="utf-8" ?>  
<bookstore xmlns="http://www.contoso.com/books">  
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">  
        <title>The Autobiography of Benjamin Franklin</title>  
        <author>  
            <first-name>Benjamin</first-name>  
            <last-name>Franklin</last-name>  
        </author>  
        <price>8.99</price>  
    </book>  
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">  
        <title>The Confidence Man</title>  
        <author>  
            <first-name>Herman</first-name>  
            <last-name>Melville</last-name>  
        </author>  
        <price>11.99</price>  
    </book>  
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">  
        <title>The Gorgias</title>  
        <author>  
            <name>Plato</name>  
        </author>  
        <price>9.99</price>  
    </book>  
</bookstore>  

注解

为当前节点及其子节点创建 XmlReader 对象时,XmlReader 对象的 ReadState 属性设置为 Initial。 当首次调用 XmlReader 对象的 Read 方法时,XmlReader 移动到 XPathNavigator 的当前节点上。 新的 XmlReader 对象继续执行读取操作,直到到达 XML 树的结尾为止。 此时,Read 方法返回 falseXmlReader 对象的 ReadState 属性设置为 EndOfFile

备注

更改对象的位置 XmlReader 不会影响对象 XPathNavigator的位置。

当前节点的作用域内命名空间的命名空间声明不会插入到提供给对象的 XmlReader XML 流中。

备注

此行为不同于 WriteSubtree 方法。

此方法创建 XmlReader 具有特定读取器设置的对象,使用此方法的模块无法控制这些设置。 例如,此方法返回的读取器禁止 (DTD) 处理数据类型定义。 如果读取器尝试读取使用 DTD 的文件,则会引发错误 XmlException。 异常的消息将为 Unexpected DTD declaration

可以通过实现XmlResolver返回所需XmlReaderSettings自定义XmlReader项来更改此行为。

适用于