【问题标题】:Dynamically create xml nodes动态创建xml节点
【发布时间】:2013-08-08 19:20:11
【问题描述】:

我有一个特定的需求,我正在解析一个文件,然后我需要根据我解析的数据创建一个 xml 文件。

例如,我创建了两个地图(tableMap、fieldMap)。

tableMap: [1:{Table=patient}, 2:{Table=provider}]
fieldMap: [1:{Table=patient, Field=id}, 2:{Table=patient, Field=gender},  
   3:{Table=provider, Field=id}, 4:{Table=provider, Field=name}]

使用 Groovy,我将从 tableMap 的循环开始并获取第一个表(患者)。然后我会循环遍历 fieldMap 来获取与 Table 匹配的字段。

下面是一些示例代码,展示了我想如何使用“value.Table(tag:'01',value.Field)”动态创建节点和元素名称:

tableMap.each
{ tKey, tValue ->

    // Find the Table value in the fieldMap that matches the value 
    // in the tableMap      
    def tableFields = fieldMap.findAll { fKey, fValue -> 
        fValue.Table == tValue.Table 
    }
    tValue.Table = []

    // Create an XML file with all the tables and field names collected.
    xsdToXml.root() 
    {

        // dynamically create xml nodes
        tableFields.each 
        { key, value ->
            value.Table + '()' {
                value.Table(tag:'01',value.Field)       
            }
        }
    }
}

我不确定这是否可行,如果不是,我只想有人告诉我,这样我就不会再浪费时间了。如果是的话,我会很感激一个如何做到这一点的例子。

谢谢 - 卡尔

【问题讨论】:

  • xml应该是什么样子的?

标签: xml groovy nodes


【解决方案1】:

对,你没有说你想要输出 XML 的样子,而是取 fieldMap(你不需要 tableMap):

def fieldMap = [ 1:[ Table:'patient', Field:'id' ], 
                 2:[ Table:'patient', Field:'gender' ],  
                 3:[ Table:'provider', Field:'id' ],
                 4:[ Table:'provider', Field:'name' ] ]

你可以这样做:

import groovy.xml.*

String x = new StreamingMarkupBuilder().bind {
    xml {
        fieldMap.values().groupBy { it.Table }.each { table, values ->
            "${table}" {
                values.each {
                    "${it.Field}"()
                }
            }
        }
    }
}

生成xml:

<xml>
    <patient>
        <id/>
        <gender/>
    </patient>
    <provider>
        <id/>
        <name/>
    </provider>
</xml>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多