加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy>嵌套映射到Xml

发布时间:2020-12-14 16:25:08 所属栏目:大数据 来源:网络整理
导读:我想在Groovy中将我的Map对象转换为Xml.我已经浏览了当前的例子,我认为这会简单得多! 我找到的所有样品,要么使用a MarkupBuilder to manually specify the fields,要么使用have a utility method到iterate over the tree.最令人发指的! 有什么我想念的吗?
我想在Groovy中将我的Map对象转换为Xml.我已经浏览了当前的例子,我认为这会简单得多!

我找到的所有样品,要么使用a MarkupBuilder to manually specify the fields,要么使用have a utility method到iterate over the tree.最令人发指的!

有什么我想念的吗?我可以简单地转换这些其他格式……

JsonOutput.prettyPrint(JsonOutput.toJson(map))    // json
(map as ConfigObject).writeTo(new StringWriter()) // groovy
new Yaml().dump(map,new StringWriter())          // yml

为什么我不能这样做?

XmlUtil.serialize(map)

(或者我如何将我的Map对象转换为Element / Node / GPathResult / Writable对象?)

Groovy示例代码

def myMap = [
    key1: 'value1',key2: 'value2',key3: [
        key1: 'value1',key3: [
            key1: 'value1',]
    ]
]

首选输出

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

解决方法

你可以做:

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>

你可以调用我没知道的神奇方法(可能是因为属性,没有魔术贴图 – > xml转换可以在不知道所需输出结构的情况下完成)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读