[英]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.