2014-01-27 62 views
1

我有一個XML文件。我想用C#將它轉換爲JSON。但是,該XML文件超過20 GB。大數據Xml文件(文件大小超過20GB)轉換爲Json文件

我試圖用XmlReader讀取XML,然後將每個節點追加到JSON文件中。我寫了下面的代碼:

var path = @"c:\result.json"; 
TextWriter tw = new StreamWriter(path, true, Encoding.UTF8); 
tw.Write("{\"A\":"); 

using (XmlTextReader xmlTextReader = new XmlTextReader("c:\\muslum.xml")) 
{ 
    while (xmlTextReader.Read()) 
    { 
     if (xmlTextReader.Name == "A") 
     { 
      var xmlDoc = new XmlDocument(); 
      var v = xmlTextReader.ReadInnerXml(); 

      string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None, true); 

      tw.Write(json); 
     } 
    } 
} 

tw.Write("}"); 
tw.Close(); 

此代碼不能正常工作。轉換json時出現錯誤。有沒有最好的方法來執行轉換?

+0

你看過XDocument,你可以用linq查詢xml。它會讓你的任務更容易 – Murdock

+0

什麼是錯誤?試着處理一個較小的文件(比方說兩個節點),看看那個JSON有什麼問題(例如:如果你的循環產生一個數組......它在哪裏打開/關閉?) –

+0

你試過這個問題的解決方案: http://stackoverflow.com/questions/7711818/storing-large-xml-in-mongodb(類型的雙重內容) – aloisdg

回答

2

我會被一個做下列方式

  • 生成類了XSD架構的使用XSD.EXE

  • 打開的文件和閱讀最高水平(即您的文檔級別)標籤的一個(與XmlTextReader的或的XmlReader)

  • 連載每個標籤到對象使用生成的類

  • 反序列化生成的對象,以JSON和保存到任何

  • 考慮1000-2000標籤

  • 你說得對,序列化/反序列化正在緩慢批節能。仍然在幾個線程中工作,最好使用TPL會給你很好的速度。也可以考慮使用json.net串行,實在是比標準的人快很多(這是web.api標準雖然)

我可以把一些代碼片段在上午,如果你需要他們。 我們正在以這種方式處理大(1-10gigs)文件以便將數據保存到sql server數據庫。

+0

我以爲這是。但序列化和反序列化過程需要很長時間。所以導入xml到db會花費很長時間。我問這個問題找到最快的方法。如果您分享代碼片段,我會很高興。謝謝 –