栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JAVA将CSV转换为XML

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JAVA将CSV转换为XML

我同意Kennet。

我只是添加了

aTransformer .setOutputProperty(OutputKeys.INDENT, "yes");aTransformer .setOutputProperty(OutputKeys.METHOD, "xml");aTransformer .setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

这在元素之间添加了新行,并允许缩进。

更新

首先,我们要介绍的文件不是CSV(逗号分隔值)文件,我将让您担心这个问题…

List<String> headers = new ArrayList<String>(5);File file = new File("Names2.csv");BufferedReader reader = null;try {    documentBuilderFactory domFactory = documentBuilderFactory.newInstance();    documentBuilder domBuilder = domFactory.newdocumentBuilder();    document newDoc = domBuilder.newdocument();    // Root element    Element rootElement = newDoc.createElement("XMLCreators");    newDoc.appendChild(rootElement);    reader = new BufferedReader(new FileReader(file));    int line = 0;    String text = null;    while ((text = reader.readLine()) != null) {        StringTokenizer st = new StringTokenizer(text, " ", false); String[] rowValues = new String[st.countTokens()];        int index = 0;        while (st.hasMoreTokens()) { String next = st.nextToken(); rowValues[index++] = next;        }        //String[] rowValues = text.split(",");        if (line == 0) { // Header row for (String col : rowValues) {     headers.add(col); }        } else { // Data row Element rowElement = newDoc.createElement("row"); rootElement.appendChild(rowElement); for (int col = 0; col < headers.size(); col++) {     String header = headers.get(col);     String value = null;     if (col < rowValues.length) {         value = rowValues[col];     } else {         // ?? Default value         value = "";     }     Element curElement = newDoc.createElement(header);     curElement.appendChild(newDoc.createTextNode(value));     rowElement.appendChild(curElement); }        }        line++;    }    ByteArrayOutputStream baos = null;    OutputStreamWriter osw = null;    try {        baos = new ByteArrayOutputStream();        osw = new OutputStreamWriter(baos);        TransformerFactory tranFactory = TransformerFactory.newInstance();        Transformer aTransformer = tranFactory.newTransformer();        aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");        aTransformer.setOutputProperty(OutputKeys.METHOD, "xml");        aTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");        Source src = new DOMSource(newDoc);        Result result = new StreamResult(osw);        aTransformer.transform(src, result);        osw.flush();        System.out.println(new String(baos.toByteArray()));    } catch (Exception exp) {        exp.printStackTrace();    } finally {        try { osw.close();        } catch (Exception e) {        }        try { baos.close();        } catch (Exception e) {        }    }} catch (Exception e) {    e.printStackTrace();}

现在,我在这里使用的是a

List
而不是a
Map
。您需要确定如何最好地解决缺失值问题。如果不事先知道文件的结构,这将不是一个简单的解决方案。

无论如何,我最终会

<?xml version="1.0" encoding="UTF-8" standalone="no"?><XMLCreators>    <row>        <Name>chi</Name>        <Age>23</Age>        <Sex/>    </row>    <row>        <Name>kay</Name>        <Age>19</Age>        <Sex>male</Sex>    </row>    <row>        <Name>John</Name>        <Age>male</Age>        <Sex/>    </row></XMLCreators>

更新合并

public class XMLCreators {    // Protected Properties    protected documentBuilderFactory domFactory = null;    protected documentBuilder domBuilder = null;    public XMLCreators() {        try { domFactory = documentBuilderFactory.newInstance(); domBuilder = domFactory.newdocumentBuilder();        } catch (FactoryConfigurationError exp) { System.err.println(exp.toString());        } catch (ParserConfigurationException exp) { System.err.println(exp.toString());        } catch (Exception exp) { System.err.println(exp.toString());        }    }    public int convertFile(String csvFileName, String xmlFileName,         String delimiter) {        int rowsCount = -1;        try { document newDoc = domBuilder.newdocument(); // Root element Element rootElement = newDoc.createElement("XMLCreators"); newDoc.appendChild(rootElement); // Read csv file BufferedReader csvReader; csvReader = new BufferedReader(new FileReader(csvFileName));//     int fieldCount = 0;//     String[] csvFields = null;//     StringTokenizer stringTokenizer = null;////     // Assumes the first line in CSV file is column/field names//     // The column names are used to name the elements in the XML file,//     // avoid the use of Space or other characters not suitable for XML element//     // naming////     String curLine = csvReader.readLine();//     if (curLine != null) {//         // how about other form of csv files?//         stringTokenizer = new StringTokenizer(curLine, delimiter);//         fieldCount = stringTokenizer.countTokens();//         if (fieldCount > 0) {//  csvFields = new String[fieldCount];//  int i = 0;//  while (stringTokenizer.hasMoreElements()) {//      csvFields[i++] = String.valueOf(stringTokenizer.nextElement());//  }//         }//     }////     // At this point the coulmns are known, now read data by lines//     while ((curLine = csvReader.readLine()) != null) {//         stringTokenizer = new StringTokenizer(curLine, delimiter);//         fieldCount = stringTokenizer.countTokens();//         if (fieldCount > 0) {//  Element rowElement = newDoc.createElement("row");//  int i = 0;//  while (stringTokenizer.hasMoreElements()) {//      try {//          String curValue = String.valueOf(stringTokenizer.nextElement());//          Element curElement = newDoc.createElement(csvFields[i++]);//          curElement.appendChild(newDoc.createTextNode(curValue));//          rowElement.appendChild(curElement);//      } catch (Exception exp) {//      }//  }//  rootElement.appendChild(rowElement);//  rowsCount++;//         }//     }//     csvReader.close();////     // Save the document to the disk file//     TransformerFactory tranFactory = TransformerFactory.newInstance();//     Transformer aTransformer = tranFactory.newTransformer();//     Source src = new DOMSource(newDoc);//     Result result = new StreamResult(new File(xmlFileName));//     aTransformer.transform(src, result);//     rowsCount++; int line = 0; List<String> headers = new ArrayList<String>(5); String text = null; while ((text = csvReader.readLine()) != null) {     StringTokenizer st = new StringTokenizer(text, delimiter, false);     String[] rowValues = new String[st.countTokens()];     int index = 0;     while (st.hasMoreTokens()) {         String next = st.nextToken();         rowValues[index++] = next;     }     if (line == 0) { // Header row         for (String col : rowValues) {  headers.add(col);         }     } else { // Data row         rowsCount++;         Element rowElement = newDoc.createElement("row");         rootElement.appendChild(rowElement);         for (int col = 0; col < headers.size(); col++) {  String header = headers.get(col);  String value = null;  if (col < rowValues.length) {      value = rowValues[col];  } else {      // ?? Default value      value = "";  }  Element curElement = newDoc.createElement(header);  curElement.appendChild(newDoc.createTextNode(value));  rowElement.appendChild(curElement);         }     }     line++; } ByteArrayOutputStream baos = null; OutputStreamWriter osw = null; try {     baos = new ByteArrayOutputStream();     osw = new OutputStreamWriter(baos);     TransformerFactory tranFactory = TransformerFactory.newInstance();     Transformer aTransformer = tranFactory.newTransformer();     aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");     aTransformer.setOutputProperty(OutputKeys.METHOD, "xml");     aTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");     Source src = new DOMSource(newDoc);     Result result = new StreamResult(osw);     aTransformer.transform(src, result);     osw.flush();     System.out.println(new String(baos.toByteArray())); } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         osw.close();     } catch (Exception e) {     }     try {         baos.close();     } catch (Exception e) {     } } // Output to console for testing // Resultt result = new StreamResult(System.out);        } catch (IOException exp) { System.err.println(exp.toString());        } catch (Exception exp) { System.err.println(exp.toString());        }        return rowsCount;        // "XLM document has been created" + rowsCount;    }}

使用OpenCSV更新

public class XMLCreators {    // Protected Properties    protected documentBuilderFactory domFactory = null;    protected documentBuilder domBuilder = null;    public XMLCreators() {        try { domFactory = documentBuilderFactory.newInstance(); domBuilder = domFactory.newdocumentBuilder();        } catch (FactoryConfigurationError exp) { System.err.println(exp.toString());        } catch (ParserConfigurationException exp) { System.err.println(exp.toString());        } catch (Exception exp) { System.err.println(exp.toString());        }    }    public int convertFile(String csvFileName, String xmlFileName,         String delimiter) {        int rowsCount = -1;        BufferedReader csvReader;        try { document newDoc = domBuilder.newdocument(); // Root element Element rootElement = newDoc.createElement("XMLCreators"); newDoc.appendChild(rootElement); // Read csv file csvReader = new BufferedReader(new FileReader(csvFileName)); // CSVReader reader = new CSVReader(new FileReader("names.csv"), delimiter.charAt(0)); //CSVReader reader = new CSVReader(csvReader); String[] nextLine; int line = 0; List<String> headers = new ArrayList<String>(5); while ((nextLine = reader.readNext()) != null) {     if (line == 0) { // Header row         for (String col : nextLine) {  headers.add(col);         }     } else { // Data row         Element rowElement = newDoc.createElement("row");         rootElement.appendChild(rowElement);         int col = 0;         for (String value : nextLine) {  String header = headers.get(col);  Element curElement = newDoc.createElement(header);  curElement.appendChild(newDoc.createTextNode(value.trim()));  rowElement.appendChild(curElement);  col++;         }     }     line++; } // FileWriter writer = null; try {     writer = new FileWriter(new File(xmlFileName));     TransformerFactory tranFactory = TransformerFactory.newInstance();     Transformer aTransformer = tranFactory.newTransformer();     aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");     aTransformer.setOutputProperty(OutputKeys.METHOD, "xml");     aTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");     Source src = new DOMSource(newDoc);     Result result = new StreamResult(writer);     aTransformer.transform(src, result);     writer.flush(); } catch (Exception exp) {     exp.printStackTrace(); } finally {     try {         writer.close();     } catch (Exception e) {     } } // Output to console for testing // Resultt result = new StreamResult(System.out);        } catch (IOException exp) { System.err.println(exp.toString());        } catch (Exception exp) { System.err.println(exp.toString());        }        return rowsCount;        // "XLM document has been created" + rowsCount;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号