Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy>;嵌套映射到Xml_Xml_Groovy - Fatal编程技术网

Groovy>;嵌套映射到Xml

Groovy>;嵌套映射到Xml,xml,groovy,Xml,Groovy,我想在Groovy中将我的Map对象转换为Xml。我已经查看了当前的示例,我认为这会更简单 我找到的所有样本,要么使用,要么使用。最可恶的 有什么我遗漏的吗?我可以转换这些其他格式足够简单 JsonOutput.prettyPrint(JsonOutput.toJson(map))//json (映射为ConfigObject).writeTo(新的StringWriter())//groovy 新Yaml().dump(映射,新StringWriter())//yml 为什么我不能这么做 X

我想在Groovy中将我的
Map
对象转换为Xml。我已经查看了当前的示例,我认为这会更简单

我找到的所有样本,要么使用,要么使用。最可恶的

有什么我遗漏的吗?我可以转换这些其他格式足够简单

JsonOutput.prettyPrint(JsonOutput.toJson(map))//json
(映射为ConfigObject).writeTo(新的StringWriter())//groovy
新Yaml().dump(映射,新StringWriter())//yml
为什么我不能这么做

XmlUtil.serialize(映射)
(或者如何将我的
映射
对象强制转换为
元素
/
节点
/
GPathResult
/
可写
对象?)

Groovy示例代码
def myMap=[
键1:‘值1’,
键2:‘值2’,
关键3:[
键1:‘值1’,
键2:‘值2’,
关键3:[
键1:‘值1’,
键2:‘值2’,
]
]
]
优先输出

价值1
价值2
价值1
价值2
价值1
价值2
您可以执行以下操作:

import groovy.xml.*

new StringWriter().with { sw ->
    new MarkupBuilder(sw).with {
        root { 
            myMap.collect { k, v ->
                "$k" { v instanceof Map ? v.collect(owner) : mkp.yield(v) }
            }
        }
    }
    println sw.toString()
}
要输出:

<root>
  <key1>value1</key1>
  <key2>value2</key2>
  <key3>
    <key1>value1</key1>
    <key2>value2</key2>
    <key3>
      <key1>value1</key1>
      <key2>value2</key2>
    </key3>
  </key3>
</root>

价值1
价值2
价值1
价值2
价值1
价值2

我不知道有什么神奇的方法可以调用(可能是由于属性的原因,在不知道所需的输出结构的情况下没有神奇的映射->xml转换)

注意:您需要在collect中添加
if(v)
,或者在yield中添加
if(v)
:“null”,以避免元素具有空值时出现错误。