Search code examples
javaxml-serializationxstreamapache-camelxmlmapper

Most Efficient way to create XML from java List object


i am working on converting CSV to XML, though i have many ways to do this but my requirement is to do it in such a way that in future the mapping can be changed without any code change. so we are using the following approach. we are using Apache camel for the integration so CSV is being converted out of the box by camel and is being provided as a List<List<String>> with data something like

{[header1,header2,header3],[1,2,3],[2,4,5]}

i need to convert this list data to XML is the defined form but since i can't use the java mapping so was planning to do something like to convert this List in to a flat XML file using XStream and than use xslt to map the raw XML file to xslt, but when i am XStream to convert List to XML it giving following output

<list>
  <java.util.Arrays_-ArrayList>
    <a class="string-array">
      <string>Quantity</string>
      <string>Price</string>
      <string>Total</string>
      <string>Date</string>
      <string>ID</string>
      <string>Name</string>
      <string>Ref#</string>
    </a>
  </java.util.Arrays_-ArrayList>
  <java.util.Arrays_-ArrayList>
    <a class="string-array">
      <string>4</string>
      <string>1.13</string>
      <string>4.52</string>
      <string>9/4/2008</string>
      <string>275</string>
      <string>Blue Ink</string>
      <string>49385730</string>
    </a>
  </java.util.Arrays_-ArrayList>
  <java.util.Arrays_-ArrayList>
    <a class="string-array">
      <string>5</string>
      <string>2.16</string>
      <string>2.16</string>
      <string>8/3/2008</string>
      <string>229</string>
      <string>Red Ink</string>
      <string>20549348</string>
    </a>

my sample CSV is

Quantity,Price,Total,Date,ID,Name,Ref#
4,1.13,4.52,9/4/2008,275,Blue Ink,49385730
5,2.16,2.16,8/3/2008,229,Red Ink,20549348

so it seems not possible to map this raw XML to the required XML using XSLT. Is there any way to convert this List data in to some more presentable XML format so that we can map that XML with XSLT to avoid any code change. Or is there any other more efficient way to convert this list in to XML structure

Thanks in advance


Solution

  • The way how the generated XML is described (headers become the element tags), it is really hard to generate without custom programming. The best bet would be to write some code yourself using DOM4J.