2016-06-28 8 views
0

600mb付近の大量のxmlデータを変換したいと思っています。ヘッダやルートノードがありません。次のコードを試しましたが、ルートノードはありません。大きなファイルを処理する最も効果的な方法は何ですか?大きなxmlをcsvに変換する

using (FileStream fs = new FileStream(@"C:\Projects\csvExport\csvExport\csvExport\bin\VLFLBNM7.xml", FileMode.Open)) 
{ 

      XmlRootAttribute xRoot = new XmlRootAttribute(); 
      xRoot.ElementName = "ReportDetails"; 
      // xRoot.Namespace = "http://www.cpandl.com"; 
      xRoot.IsNullable = true; 

      XmlSerializer serializer = new XmlSerializer(typeof(Sequence[]),xRoot); 
      var data = (Sequence[])serializer.Deserialize(fs); 
      List<string> list = new List<string>(); 
      foreach (var item in data) 
      { 
       List<string> ss = new List<string>(); 
       foreach (var point in item.SourcePath) ss.Add(point.X + "," + point.Y); 
       list.Add(string.Join(",", ss)); 
      } 
      File.WriteAllLines(@"C:\Projects\csvExport\csvExport\csvExport\bin\csvFile.csv", list); 
} 
+0

正確なエラーメッセージは何ですか? – Veverke

+0

有効なスキーマ – rogue39nin

+0

を持つサイズが600mbのファイルがない場合、空のファイルを返すだけのエラーはありません。ルートノードAのように2つの子BとCがあるCのサンプルxmlファイルを作成しましたか? 1人の子供...いくつかのガベージテキストノードを追加し、まだ何も得られないかどうかを確認します。 – Veverke

答えて

0

あなたのXML名前「ReportDetails」でルートノードを持っている場合、このコードは

を正常に動作し、このコードを動作させるためのサンプルXMLファイルには、あなたのXMLが「不足している

<?xml version="1.0"?> 
<ReportDetails> 
<Sequence> 
    <SourcePath> 
     <X>samply x</X> 
     <Y>xample y</Y> 

    </SourcePath> 
</Sequence> 
</ReportDetails> 

ようにする必要がありますコードで指定した「ReportDetails」

xRoot.ElementName = "ReportDetails"; 
+0

こんにちは申し訳ありませんが、私は自分のニーズにモディファイしようとしていたサンプルでしたcsvにxmlを変換する汎用ルーチンを作成しようとしていません – rogue39nin

関連する問題