Использование строителя строк для размещения XML в одном столбце csv / xls не работает - PullRequest
0 голосов
/ 08 октября 2019

У меня проблема с ответом XML и форматированием его в CSV, который впоследствии можно открыть как XLS и просмотреть весь ответ в одной ячейке. Я знаю .. это не то, как я бы это сделал, но они получают то, что просят.

До сих пор я пытался использовать построитель строк. Это было успешно при форматировании ответа в одну строку, я проверил это, записав его в текстовый файл и скопировав его в Eclipse. Когда я помещаю одинарные кавычки вокруг XML, он превращается в строку.

При попытке взять этот же ответ в однострочном формате и вставить его в файл CSV ... Файл CSV разбивает запятые в строке XML и размещает ответ в нескольких десятках ячеек.

    BufferedReader br = new BufferedReader(new FileReader(new File('responseXml.txt')));
    String l;
    StringBuilder sb = new StringBuilder();


    while((l=br.readLine())!= null){sb.append(l.trim());
    File respfile = new File("outresp.txt")
    respfile.append(l)
    println respfile.text
//verified single line string  
    respContents = new File("outresp.txt").text  
                    }

    File file = new File('outXML.csv')
    file.append(respContents)
    println file.text   

// open csv still broke across many lines

То, что я хотел бы, это одна строка XML в одну ячейку xls.

1 Ответ

0 голосов
/ 08 октября 2019

, чтобы поместить значение в один столбец в CSV (Excel), у вас есть два варианта:

  1. удалить все новые строки (\r\n) и запятые (,)
  2. замените каждую двойную кавычку (") на две ("") и оберните все значение двойными кавычками.

второй вариант позволяет сохранить исходный (многострочный) формат строки в одной ячейке Excel.

вот код для второго варианта:

//assume you have whole xml in responseXml variable
def responseXml = '''<?xml version="1.0"?>
<aaa text="hey, you">
    <hello name="world"/>
</aaa>
'''

//take xml string in double quotes and escape all doublequotes
responseXml = '"'+ responseXml.replaceAll(/"/,'""') + '"' 

def csv = new File('/11/1.csv')
csv.setText("col1,col2,xml\nfoo,bar") // emulate some existing file
csv.append(",${responseXml}\n")

в результате:

enter image description here

...