xml序列化从java列表对象创建xml的最有效方法
我正在致力于将CSV转换为XML,虽然我有很多方法可以做到这一点,但我的要求是这样做,即将来可以在不更改任何代码的情况下更改映射。
因此,我们使用以下方法。
我们正在使用ApacheCamel进行集成,因此CSV由camel进行开箱即用的转换,并以List<List<String>>
的形式提供
使用类似于
{[header1,header2,header3],[1,2,3],[2,4,5]}
我需要将这个列表数据转换为定义的XML格式,但是由于我不能使用java映射,所以我计划做类似的事情
使用XStream
将此列表转换为平面XML文件,然后使用xslt将原始XML文件映射到xslt,但当我使用XStream将列表转换为XML时,它会给出以下输出
<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>
我的示例是CSV
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
因此,似乎不可能使用XSLT将此原始XML映射到所需的XML。 是否有任何方法将此列表数据转换为更具表现力的XML格式,以便我们可以使用XSLT映射该XML以避免任何代码更改。 或者有没有其他更有效的方法将此列表转换为XML结构
提前谢谢
# 1 楼答案
我认为XSLT可以完成这项工作:
迭代所有列表项时,可以使用xslt的position()函数导航到第一个列表项中的右列标识符
# 2 楼答案
按照生成的XML的描述方式(标题成为元素标记),如果没有自定义编程,很难生成XML。最好的选择是自己使用DOM4J编写一些代码
# 3 楼答案
这比我想象的要复杂,主要是因为列表输入:
这将给你:
容器:
标题:
和行项目: