2016-04-01 55 views
0

異なるバス停情報のcsvファイルを読み込み、それらをxmlファイルに変換して新しいxmlファイルとして保存するJavaプログラムを作成しようとしています。私は友人からのいくつかのコードについていくつかの助けをしましたが、コードにコメントを入れることを忘れていたので、問題が何であるか理解できません。コードを修正する助けがあれば大いに感謝します。コードを以下に示します。Javaを使用してCSVファイルをXMLファイルに変換する

public class converter { 
protected DocumentBuilderFactory domFactory = null; 
protected DocumentBuilder domBuilder = null; 

public static void main(String[] args) { 



    ArrayList<String> busStopInfo = new ArrayList<String>(7); 

    File file = new File("stops.csv"); 
    BufferedReader readFile = null; 
    try { 
     DocumentBuilderFactory df = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = df.newDocumentBuilder(); 

     Document document = db.newDocument(); 

     Element rootElement = document.createElement("BusStops"); 

     document.appendChild(rootElement); 
     readFile = new BufferedReader(new FileReader(file)); 
     int line = 0; 

     String information = null; 
     while ((information = readFile.readLine()) != null) { 

      String[] rowValues = information.split(","); 

      if (line == 0) { 
       for (String columnInfo : rowValues) { 
        busStopInfo.add(columnInfo); 
       } 
      } else { 
       Element childElement = document.createElement("details"); 
       rootElement.appendChild(childElement); 


       for (int columnInfo = 0; columnInfo < busStopInfo.size(); columnInfo++) { 

        String header = busStopInfo.get(columnInfo); 
        String value = null; 

        if (columnInfo < rowValues.length) { 
         value = rowValues[columnInfo]; 
        } else { 
         value = " "; 
        } 

        Element current = document.createElement(header); 
        current.appendChild(document.createTextNode(value)); 
        childElement.appendChild(current); 
        System.out.println(value); 
       } 
      } 
      line++; 
     } 
    Transformer tf = TransformerFactory.newInstance().newTransformer(); 
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
tf.setOutputProperty(OutputKeys.INDENT, "yes"); 
Writer output = new StringWriter(); 
tf.transform(new DOMSource(document), new StreamResult(output)); 
System.out.println(output.toString()); 
} catch (Exception e) { 

    } 
} 

}

以下

csvファイルの抽出

AtcoCode、のCommonName、LocalityName、ParentLocalityName、緯度、経度 0100BRP90336、センター、ブリストルシティセンター、ブリストル、51.4543379612、です - 2.5978824115 0170SGA56570、UWEエントランスノース、アビーウッド,, 51.50419145、-2.549547265 079073001Z、バスステーションエクスプレスラウンジ、ミドルスブラ,, 54.5760020508、-1.2391798779 0800COC31523、バスステーション、ニューキー,, 50.4130339395、-5.0856695446 0800COC56586、バスステーション、カンボーン,, 50.2132677521、-5.2974299693

これは私が

<xs:element name="Busstops"> 

<xs:element name="stops" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="AtcoCode" type="xs:string" minOccurs="1" maxOccurs="1"/> 
      <xs:element name="CommonName" type="xs:string" "minOccurs="1" maxOccurs="1"/> 
      <xs:element name="LocalityName" type="xs:string" "minOccurs="1" maxOccurs="1"/> 
      <xs:element name="ParentLocalityName" type="xs:string" "minOccurs="0" maxOccurs="1"/> 
      <xs:element name="Longitude" type="xs:string" "minOccurs="1" maxOccurs="1"/> 
      <xs:element name="Latitude" type="xs:string" "minOccurs="1" maxOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:sequence> 

+0

コードに問題がありますか?どのようにしてあなたが期待していることをしていないのですか? – KevinO

+0

ファイルが出力されずに保存されていないため、この言語での経験があまりないため、不明な点がある場合は非常にわかりません。私はコードを実行し、何も起こっているという証拠はありません。 – Granto867

+0

予想される入力を表示するには、stops.csvから2行を入力する必要があります。予想される出力の短い例があった方が良いでしょう。 – KevinO

答えて

0

を複製しようとしていますxmlファイルのスキーマですこのコードは、読み取られた.csvをXML文書(stdoutに表示される)に変換する出力を生成しています。提供の.csv抜粋に基づいて

、コードが正常に動作し、標準出力にXMLを生成します。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<BusStops> 
<details> 
<AtcoCode>0100BRP90336</AtcoCode> 
<CommonName>The Centre</CommonName> 
<LocalityName>Bristol City Centre</LocalityName> 
<ParentLocalityName>Bristol</ParentLocalityName> 
<Latitude>51.4543379612</Latitude> 
<Longitude>-2.5978824115</Longitude> 
</details> 
... 
</BusStops> 

代わりに標準出力に表示するが、ファイルに書き込みたいの、あなたは、単にリダイレクトすることができればファイルにstdout(最も簡単なアプローチ)。

それ以外の場合は、System.out.println(output.toString())を変更してファイルに書き込みます。次のようなものがあります。

PrintWriter writer = new PrintWriter("the-file-name.xml", "UTF-8"); 
writer.println(output.toString()); 
writer.close(); 

となります。

+0

私はそれを提供された行に変更し、活動を変更せずにコードを実行しました。コードは何もしていないようです。 stops.xmlファイルを手動で作成する必要がありますか、それともコードが私のために行いますか? – Granto867

+0

@ Granto867、コードは動作し、サンプルの.csvに基づいて答えに表示される出力を生成します。私はstops.csvファイルへのフルパスを入れることを提案するかもしれません(例えば 'new File(" c:/tmp/stops.csv ")')。プログラムはPrintWriterで指定された名前の.xmlファイルを作成します。 (おそらくフルパスも使用するべきです)。xmlは要素として「停止」するのではなく「詳細」を持っていますが、これはコード内で簡単に修正されます。 – KevinO

+0

ありがとう、これは働いた:D – Granto867

関連する問題