我正在搜索一个API,将地图列表转换为Xml。
我不想使用任何基于注释的解析器,例如JaxB。 有没有方便的库可以做到这一点?
List<Map<String, Object>> myList = new ArrayList();
Map<String,String> map1 = new HashMap<String,String();
map.put("name","mike");
map.put("surname","smith");
Map<String,String> map2 = new HashMap<String,String();
map.put("name","bob");
map.put("surname","smith");
myList.add(map1);
myList.add(map2);
我要像这样将其保存到文件中
<map1>
<name>mike</name>
<surname>smith</surname>
</map1>
<map2>
<name>bob</name>
<surname>smith</surname>
</map2>
答案 0 :(得分:0)
第一点是,这是一个相当糟糕的XML设计。为地图指定不同的名称(map1,map2等)几乎肯定会使处理XML更加困难。但是也许您对设计没有任何控制。
接下来的一点是,要从Java生成XML,我通常不会选择从构建地图列表开始。但同样,也许您对输入的形式没有任何控制。
如果您使用的是Saxon,则可以使用静态方法Map
将每个XdmMap
转换为XdmMap.makeMap(Map)
;由于XdmMap
是XdmItem
,因此您可以使用构造函数XdmValue
将一系列地图构建为XdmValue(Iterable<? extends XdmItem>)
。然后,您可以将此XdmValue
作为参数(名为list-of-maps
)传递给简单的样式表
<xsl:param name="list-of-maps" as="map(xs:string, xs:string)*"/>
<xsl:template name="xsl:initial-template">
<xsl:for-each select="$list-of-maps">
<xsl:element name="map{position()}">
<name>{?name}</name>
<surname>{?surname}</surname>
</xsl:element>
</xsl:for-each>
</xsl:template>