2012-06-13 17 views
1

我有這樣的事情:如何使用XMLTextReader讀取完整節點?

<?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節點(我可以做到這一點只是讀),但後來當我得到例如ConfigDatas節點能夠一次讀取所有ArrayOfConfigData節點文本。這可能嗎?

回答

1

XmlTextReader設計用於迭代XML文檔。這非常有效,因爲您不會一次創建整個文檔的內存中表示。如果您有非常大的XML文檔,那麼以這種方式處理它們是非常重要的。

如果您想要加載整個XML,以便您可以例如使用XPath查詢,請使用XmlDocumentXDocument,具體取決於您的確切需求。

1

這是可能的;你需要做的是記住起始節點的嵌套級別(ConfigDatas),然後在嵌套級別更高的時候(也就是說,當你低於開始節點時)在循環中讀取XML。如果您不關心XML的其他部分,這種方法可以節省您的內存,因爲如果您只需要幾個較小的節點,則不會加載整個文檔,而這可能太大。

+0

你說得對。我想過這個方法,但不會像這樣使用它,因爲Eric說它不適合我的使用,但是如果你真的需要打開一個大的xml或保存mem,你的建議是一個不錯的選擇。 – Notbad