簡體   English   中英

如何在不將整個文檔加載到內存的情況下使用Xml文件?

[英]How to work with an Xml file without loading the whole document in memory?

如何在不將整個文檔加載到內存的情況下添加新節點,更新現有節點並刪除xml文檔的現有節點?

我有一個xml文檔並將其作為應用程序的內存,因此需要能夠快速進行數百次讀寫,而無需加載整個文檔。

它的結構是這樣的:

<spiderMemory>
  <profileSite profileId="" siteId="">
    <links>
      <link>
        <originalUrl></originalUrl>
        <isCrawled></isCrawled>
        <isBroken></isBroken>
        <isHtmlPage></isHtmlPage>
        <firstAppearedLevel></firstAppearedLevel>
      </link>
    </links>
  </profileSite>
</spiderMemory>

XDocument怎么可能?

謝謝

如果您想快速進行數百次讀寫操作,則可能使用了錯誤的技術。 您是否嘗試過使用普通的舊RDBMS?

如果仍然需要XML表示,則可以創建導出方法以從數據庫生成它。

XML並不能真正替代此類問題。 只是說。

另外...將整個內容存儲在內存中怎么了? 它可能有多大? 說1GB? 吸了 說1TB? 哎呀。 但是那樣的話,XML是錯誤的,錯誤的,無論如何都是錯誤的;)方式太冗長了!

您可以使用XmlReader,如下所示:

FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
while(reader.Read())
{
  Console.WriteLine(reader.Value);
}

這是一個更詳細的示例http://msdn.microsoft.com/zh-cn/library/cc189056%28v=vs.95%29.aspx

正如Daren Thomas所說,正確的解決方案是使用RDBMS代替XML來滿足您的需求。 我有使用XML和Java的部分解決方案。 Stax解析器不會解析內存中的整個文檔,並且比DOM快很多(仍然XML解析總是很慢)。 “拉解析器”(例如Stax)使您可以控制要解析的內容。 一種更簡潔的方法是,在獲取所需元素時在SAX解析器中引發異常。

要進行修改,最簡單(但速度較慢)的方法是使用XPath。 另一個(未試用的)選項是將XML文件視為文本 ,然后將其“搜索並替換” 在這里您可以使用各種文本搜索優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM