2011-12-17 37 views
0

複数のXMLファイル(標準形式)を1つのCSVファイルに変換してコンパイルする必要があります。インポートされた要素の一部についても計算を実行する必要があるため、変換されたCSVファイルごとに計算を実行しない限り、XSLTはオプションではありません(Stackoverflow:XML to CSV Using XSLT)。JAVを使用してXMLからCSVを計算、変換、コンパイル

XPathはSAX2の代替手段として提案されていますが、最終的なCSV出力が(100以上のXMLファイルに基づいて)大きいため、配列を使用することを躊躇しています。 (Stackoverflow:Convert XML file to CSV

私はSAX2を使用して、タグ要素の抽出に多少成功しました。

個々のファイルごとに出力を最後のCSV出力に追加することができれば、私はより安定したアプリケーションを使用すると思います。

大規模なデータのXML-CSV変換と組み合わせて計算を効率的に処理するにはどうすればよいですか?

XMLファイル1

<element id="1"> 
    <info>Yes</info> 
    <startValue>0</startValue> <!-- Value entered twice, ignore--!> 
    <startValue>256</startValue> 
    <stopValue>64</stopValue> 
</element> 
<element id="2"> 
    <info>No</info> 
    <startValue>50</startValue> 
    <stopValue>25</stopValue> 
</element> 
<.... 

XMLファイル2

<element id="1"> 
    <info>No</info> 
    <startValue>128</startValue> 
    <stopValue>100</stopValue> 
</element>  
<.... 

Pseudopseudocode

for all files 

    get ID 
    get info 

    for all stop and start values 
     ignore wrong values: use counter 
     difference[] = startValue(i) - stopValues(j) = 196, 28 

    append (ID, info and difference) to file "outputfile.csv" 

CSV Eutput例

File ID Info Difference Etc 
_________________________________________________ 
0  1 Yes  196   .... 
0  2 No  25   .... 
1  1 No  28   .... 
.   ...  ...   .... 
.   ...  ...   .... 
nfiles 

答えて

0

私がメモリにXMLを読み取るためにJDOMを使用することをお勧めします。次に、通常のJava構文を使用してプログラムに簡単にアクセスできます。その後、任意のライブラリを使用して簡単にCSVファイルを作成できます。個人的に私はopencsvを使用します。

メモリ使用量が懸念される場合、最大の問題はできるだけ一度にメモリ内に少数のXMLファイルを保存することです。ファイルを1つずつ読み込んで、必要な情報だけを他のデータ構造体に格納すれば、うまくいくはずです。たとえば、IDで開始された開始値のマップとIDでキーが設定された停止値のマップを作成できます。

+0

ありがとうuser393274! – noumenal

関連する問題