我需要遍歷大型XML文件(〜2GB)並選擇性地將某些節點複製到一個或多個單獨的XML文件。迭代大型XML文件和複製選擇節點
我首先想到的是使用XPath通過匹配節點和哪些其他文件(S)的節點應該被複制到每一個節點測試迭代,像這樣:
var doc = new XPathDocument(@"C:\Some\Path.xml");
var nav = doc.CreateNavigator();
var nodeIter = nav.Select("//NodesOfInterest");
while (nodeIter.MoveNext())
{
foreach (Thing thing in ThingsThatMightGetNodes)
{
if (thing.AllowedToHaveNode(nodeIter.Current))
{
thing.WorkingXmlDoc.AppendChild(... nodeIter.Current ...);
}
}
}
在該實現中,Thing
定義public System.Xml.XmlDocument WorkingXmlDoc
來保存它是AllowedToHave()
的節點。不過,我不明白如何創建一個新的XmlNode,它是nodeIter.Current的副本。
如果還有更好的方法,我很樂意聽到它。
要在2GB XML文檔上使用XPath,您的計算機必須具有> 10GB RAM,可能> 16GB。是這樣嗎? – 2012-02-28 23:57:10
@DimitreNovatchev:是的,我不知道XPath需要這麼多的RAM,而且看起來很浪費(這是一個服務器,其他進程肯定會受到影響)。你能提出一個不同的解決方案嗎 – 2012-02-29 00:05:52
我推薦使用XmlReader - 因此您不限制RAM。你的邏輯將保持大致相同。 – 2012-02-29 00:12:55