应用DOM4J读取xml输出为CSV文件
使用DOM4J读取xml输出为CSV文件
实际开发中可能需要使用CSV(一种以逗号分隔的文件)文件,程序会读取该CSV文件,然后把数据插入到表中。然而,这种文件当逗号分隔的字段特别多时,操作起来就很麻烦,如修改第73个字段值。
下面的程序演示了将字段数据写成XML文件的形式,然后再变换输出CSV文件的形式:
1.XML示例:
<?xml version="1.0" encoding="utf-8"?> <records> <record no="1"> <field lname="ziduan1" wname="W024_MOUSHIKOMINO">2532sf5277</field> <field lname="ziduan2" wname="W024_SENYOUCD">123456</field> <field lname="ziduan3" wname="W024_ISPZCD">070</field> <field lname="ziduan4" wname="W024_TJDSLZCD">1f23</field> <field lname="ziduan5" wname="W024_NAME">163</field> </record> <record no="2"> <field lname="ziduan1" wname="W024_MOUSHIKOMINO">2532277</field> <field lname="ziduan2" wname="W024_SENYOUCD">123df456</field> <field lname="ziduan3" wname="W024_ISPZCD">0370</field> <field lname="ziduan4" wname="W024_TJDSLZCD">123</field> <field lname="ziduan5" wname="W024_NAME">14sd3</field> </record> </records>
2.java代码
本程序使用DOM4J方式进行解析,故需要添加dom4j*.jar和jaxen*.jar
import java.io.PrintWriter; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jTest { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("I:\\test2.xml"); //取得根元素 //Element root = document.getRootElement(); //System.out.println(root.getName()); //Element对象有elementIterator(),可迭代; List<Element> recordList=document.selectNodes("//records/record"); List<Attribute> lNameList=document.selectNodes("//records/record[@no='1']/field/@lname"); String temp=null; PrintWriter pw=new PrintWriter("I:\\hello2.csv"); for (int k = 0; k < lNameList.size(); k++) { Attribute f=lNameList.get(k); temp=f.getText(); if(k==lNameList.size()-1){ pw.print(temp); }else pw.print(temp+","); } pw.println(); for (int i = 0; i < recordList.size(); i++) { //取得某个record Element fieldElement=recordList.get(i); //取得record下面的元素(List) List<Element> fieldList=fieldElement.selectNodes("./field"); for (int j = 0; j < fieldList.size(); j++) { Element fieldNodElement=fieldList.get(j); temp=fieldNodElement.getText(); if(j==fieldList.size()-1){ pw.print(temp); }else pw.print(temp+","); } pw.println(); } pw.close(); } }
3.程序运行后的hello2.csv文件内容如下: