使用 Java 将 CSV 文件转换为 XML 文件
Converting a CSV file to an XML file using Java
我正在尝试编写一个 java 程序,它将读取不同公交车站信息的 csv 文件并将它们转换为 xml 文件并另存为新的 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,The Centre,Bristol City Centre,布里斯托尔,51.4543379612,-2.5978824115
0170SGA56570,UWE北入口,Abbey Wood,51.50419145,-2.549547265
079073001Z,Bus Station Express Lounge,Middlesbrough,54.5760020508,-1.2391798779
0800COC31523,Bus Station,Newquay,50.4130339395,-5.0856695446
0800COC56586,Bus Station,Camborne,50.2132677521,-5.2974299693
这是我要复制的 xml 文件的架构
<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>
此代码正在生成一个输出,将读取的 .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 上显示它而是将其写入文件,您可以简单地将 stdout 重定向到文件(最简单的方法)。
否则,将System.out.println(output.toString())
更改为写入文件。类似于:
PrintWriter writer = new PrintWriter("the-file-name.xml", "UTF-8");
writer.println(output.toString());
writer.close();
会起作用。
我正在尝试编写一个 java 程序,它将读取不同公交车站信息的 csv 文件并将它们转换为 xml 文件并另存为新的 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,The Centre,Bristol City Centre,布里斯托尔,51.4543379612,-2.5978824115 0170SGA56570,UWE北入口,Abbey Wood,51.50419145,-2.549547265 079073001Z,Bus Station Express Lounge,Middlesbrough,54.5760020508,-1.2391798779 0800COC31523,Bus Station,Newquay,50.4130339395,-5.0856695446 0800COC56586,Bus Station,Camborne,50.2132677521,-5.2974299693
这是我要复制的 xml 文件的架构
<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>
此代码正在生成一个输出,将读取的 .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 上显示它而是将其写入文件,您可以简单地将 stdout 重定向到文件(最简单的方法)。
否则,将System.out.println(output.toString())
更改为写入文件。类似于:
PrintWriter writer = new PrintWriter("the-file-name.xml", "UTF-8");
writer.println(output.toString());
writer.close();
会起作用。