如何使用XMLTextReader读取完整节点?

时间:2012-06-13 16:29:25

标签: c# xml-serialization

我有这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<Data>
    <ConfigDatas>
        <ArrayOfConfigData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BTTest.Models">
            <ConfigData>
                <id>4</id>
                <ip>111111</ip>
                <port>34</port>
            </ConfigData>
            <ConfigData>
                <id>0</id>
                <ip>222222</ip>
                <port i:nil="true" />
            </ConfigData>
        </ArrayOfConfigData>
    </ConfigDatas>
    <OtherTypeDatas>
        <ArrayOfConfigData ...>
            ....
        </ArrayOfConfigData>
    <OtherTypeDatas>
</Data>

我想解析xml,得到ConfigDatas和OtherTypeDatas节点(我只能用read来做),但是当我得到例如ConfigDatas节点时,能够立即读取所有ArrayOfConfigData节点文本。这可能吗?

2 个答案:

答案 0 :(得分:1)

XmlTextReader旨在迭代XML文档。这非常节省内存,因为您不会立即创建整个文档的内存中表示。如果您有非常大的XML文档,则必须以这种方式处理它们。

如果您希望加载整个XML,以便可以例如使用XPath查询,改为使用XmlDocumentXDocument,具体取决于您的具体需求。

答案 1 :(得分:1)

有可能;您需要做的是记住起始节点(ConfigDatas)的嵌套级别,然后在循环中读取XML,而嵌套级别更高(意味着,当您位于起始节点之下时)。如果您不关心XML的其他部分,这种方法可以节省您的内存,因为如果您只需要一些较小的节点,您将不会加载整个文档太大。