【问题标题】:Writing xml content with comma ',' to csv用逗号','将xml内容写入csv
【发布时间】:2020-04-19 20:34:30
【问题描述】:

我的 csv 文件是一个逗号分隔的文件。作为我要求的一部分,我需要将变量中包含的 XML 写入每行的最后一个单元格。此 XML 包含 commas('),当通过 CSVWriter 写入时,写入不正确。每个逗号都被视为分隔符,并将 XML 拆分为不同的单元格。

我的部分xml作为示例

<tns:Nature>Residential</tns:Nature>
<tns:Type>Duplex</tns:Type>
<tns:OccupancyPurpose>Owner Occupied Primary Residence</tns:OccupancyPurpose>
<tns:Valuation>
<tns:Sequence>1</tns:Sequence>
<tns:ValuationAmount>700000</tns:ValuationAmount>
<tns:ValuationDate>2014-08-13</tns:ValuationDate>
<tns:ValuerCompany>C J A **Replace_Comma** Lee **Replace_Comma** Property</tns:ValuerCompany>
<tns:ValuationType>Electronic Assessment</tns:ValuationType>
</tns:Valuation>

我的代码如下。

    strLine = strLine + strXMLContent;
    File file = new File(strFilePath); 

        FileWriter outputfile = null;
        try 
        {
            outputfile = new FileWriter(file,true);
            CSVWriter writer = new CSVWriter(outputfile,',', CSVWriter.NO_QUOTE_CHARACTER,CSVWriter.DEFAULT_ESCAPE_CHARACTER,System.getProperty("line.separator"));;

            String arr[] = strLine.split(",",-1);
            for(int i = 0;  i< arr.length; i++)
            {
                arr[i] = arr[i].replace("Replace_Comma", ","); //Replaces filler as a comma before being placed in csv
            }
            writer.writeNext(arr);
            writer.close();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        } 

翻译为逗号时的填充符被视为分隔符,以下文本写入下一个单元格。

我尝试了很多东西,但都无济于事。请帮忙。

【问题讨论】:

  • 您是否尝试将每个数据括在 ' 或 " 之间?(CSVWriter 构造函数给了我提示它应该是可能的 - CSVWriter.NO_QUOTE_CHARACTER)
  • 我试过 CSVWriter.DEFAULT_QUOTE_CHARACTER 但它替换了一些其他引号字符而不是添加到每个字段
  • 根据javadoc该参数应该指示Writer用它的“quoteChar”引用所有数据,你是什么意思它替换其他引号?

标签: java csv


【解决方案1】:

正如@BigMike 建议的那样, 更换

CSVWriter writer = new CSVWriter(outputfile,',', CSVWriter.NO_QUOTE_CHARACTER,CSVWriter.DEFAULT_ESCAPE_CHARACTER,System.getProperty("line.separator"));;

CSVWriter writer = new CSVWriter(outputfile);

CSVWriter writer = new CSVWriter(outputfile,',', CSVWriter.DEFAULT_ESCAPE_CHARACTER,CSVWriter.NO_ESCAPE_CHARACTER,System.getProperty("line.separator"));

应该可以。

【讨论】:

  • 很抱歉,它不起作用。我也面临同样的问题
  • @MithileshIndurkar 你能分享你的 opencsv 版本吗?
  • @MithileshIndurkar 能否请您分享生成的 csv 文件的 content
  • 仅供参考:我的 opencsv 版本是 opencsv-5.0
【解决方案2】:

我能够在this问题的回答和使用下面的帮助下解决它,

String escaped = StringEscapeUtils.escapeCsv(strXML);   

File file = new File("File.csv");
String arr[] = 
{
        "123456789&94859614357",
        escaped
};

FileWriter outputfile = null;
try 
{
        outputfile = new FileWriter(file,true);
        CSVWriter writer = new CSVWriter(outputfile,',', CSVWriter.NO_QUOTE_CHARACTER,CSVWriter.NO_ESCAPE_CHARACTER,System.getProperty("line.separator"));;
        writer.writeNext(arr);
        writer.close();
} 
catch (IOException e) 
{
        e.printStackTrace();
} 

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多