如何将地图列表转换为xml

时间:2019-05-06 12:48:49

标签: java xml

我正在搜索一个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>

1 个答案:

答案 0 :(得分:0)

第一点是,这是一个相当糟糕的XML设计。为地图指定不同的名称(map1,map2等)几乎肯定会使处理XML更加困难。但是也许您对设计没有任何控制。

接下来的一点是,要从Java生成XML,我通常不会选择从构建地图列表开始。但同样,也许您对输入的形式没有任何控制。

如果您使用的是Saxon,则可以使用静态方法Map将每个XdmMap转换为XdmMap.makeMap(Map);由于XdmMapXdmItem,因此您可以使用构造函数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>