2017-08-22 11 views
-1

Javaコードを使用してXMLファイルをCSVに変換したいのですが、XMLスタイルシート(XSL)またはXSLTを使用したくありません。ここに私のXMLファイルがあります。Javaコードを使用してXMLファイルをCSVに変換するにはどうすればよいですか?

<?xml version="1.0" encoding="UTF-8"?> 
<PickAndPlace> 
<Components> 
    <Component id="1"> 
     <X_Dimension>4.33</X_Dimension> 
     <Y_Dimension>2.962</Y_Dimension> 
     <Designation>None</Designation> 
     <Package>None</Package> 
     <Angle>0</Angle> 
    </Component> 
    <Component id="5"> 
     <X_Dimension>4.33</X_Dimension> 
     <Y_Dimension>8.692</Y_Dimension> 
     <Designation>None</Designation> 
     <Package>None</Package> 
     <Angle>0</Angle> 
    </Component> 
    <Component id="9"> 
     <X_Dimension>4.33</X_Dimension> 
     <Y_Dimension>14.381</Y_Dimension> 
     <Designation>None</Designation> 
     <Package>None</Package> 
     <Angle>0</Angle> 
    </Component> 
</Components> 
</PickAndPlace> 

ここで私のCSV出力として何をしたいですか?この便利なユーティリティメソッドを抽出して

LinkedList<String> tmpList = new LinkedList<String>(); 
    try (
     BufferedReader reader = Files.newBufferedReader(Paths.get("c:/tmp.xml"), Charset.forName("UTF-8"))) { 
     String line = StringUtils.EMPTY; 
     while ((line = reader.readLine()) != null) { 
      if(line.contains("<Component id=")) { 
       String _id = extractValue(line, "<Component id=\"", "\">"); 
       String _xDimension = extractValue(reader.readLine(), "<X_Dimension>", "</X_Dimension>"); 
       String _yDimension = extractValue(reader.readLine(), "<Y_Dimension>", "</Y_Dimension>"); 
       String _designation = extractValue(reader.readLine(), "<Designation>", "</Designation>"); 
       String _package = extractValue(reader.readLine(), "<Package>", "</Package>"); 
       String _angle = extractValue(reader.readLine(), "<Angle>", "</Angle>"); 
       tmpList.add(_xDimension + "," + _yDimension + "," + _designation + "," + _package + "," + _angle + "," + _id); 
      } 

     } 
    } catch (IOException e) { 
     System.err.println(e); 
    } 

対処します:

X_Dimension,Y_Dimension,Designation,Package,Angle,_id 
4.33,2.962,None,None,0,1 
4.33,8.692,None,None,0,5 
4.33,14.381,None,None,0,9 
+1

私はあなたがこのXMLからあなたのCSVファイルをどのように構造化したいか考える必要があると思います。 – Stefan

+0

目的のCSV出力を提供できますか? – khriskooper

+1

@ khriskooperと@Stefan私は自分のCSV出力を見せました。 –

答えて

1

あなたが必要とするデータのみを抽出して、文字列の一時的なのLinkedListにすべてを格納し、ファイルのライン・バイ・ラインを読むことができます上記のコードの値。それはあなたのデータや要件に応じて、よりロバストにする必要があることに注意してください、それはサンプル・セットに指定したために正常に動作します:

private static String extractValue(String line, String prefix, String postfix) { 
    String value = line.trim().replaceAll(prefix, ""); 
    value = value.replaceAll(postfix, ""); 
    return value; 
} 

一度読んで、あなたは新しいファイルに文字列のLinkedListのを書くことができます:

try{ 
     PrintWriter writer = new PrintWriter("c:/tmp.csv", "UTF-8"); 
     writer.println("X_Dimension,Y_Dimension,Designation,Package,Angle,_id"); 
     for(String line : tmpList) { 
      writer.println(line); 
     } 
     writer.close(); 
    } catch (IOException e) { 
     System.err.println(e); 
    } 

もちろん、この方法は、このように一貫して構造化されたXMLデータに大きく依存しています。

最後に、リストに値を最初に追加するのではなく、ファイルに直接書き込むことで、一時的なリストの必要性を取り除くことができます。しかし、コードで入力と出力を分けるのは良いことです。

+0

本当に役に立ちます。ありがとうございました。 –

+0

これはあなたを助けてくれてうれしいです。それが他の人に役立つ場合、私の答えを受け入れることを検討してください。がんばろう! – khriskooper

+0

これはhorrendeousです。ちょうどJDOM 2などで解析してください。できるだけ失敗する可能性が高いこの意欲は、広がる価値がありません。 – kumesana

関連する問題