【发布时间】:2014-04-29 20:29:22
【问题描述】:
我正在尝试使用 Groovy 将 XML 文件转换为 JSON 文档,特别是使用 XmlSlurper 和 JsonBuilder。如果我对所有内容都进行硬编码,我可以很容易地做到这一点,但如果可能的话,我宁愿不这样做。
这里是 XML 的一个示例 - 在现实生活中结构是相同的,但有数百个节点。
<root>
<data>
<node1>
<child1>1</child1>
<child2>2</child2>
<child3>3</child3>
</node1>
<node2>
<child1>1</child1>
<child2>2</child2>
<child3>3</child3>
</node2>
</data>
</root>
我想将其映射到以下 JSON:
{
"type": "test",
"time": {
"$date": timestamp
},
"data": {
"node1": {
"child1": 1,
"child2": 2,
"child3": 3
},
"node2": {
"child1": 1,
"child2": 2,
"child3": 3
}
}
}
我当前的代码如下所示(感谢@dmahapatro):
def parser = new XmlSlurper().parse("file.xml")
def getNode = {String parentNode, String childNode ->
parser.data."$parentNode"
."$childNode"
.find { it.name() == childNode }
}
def root = json {
type "test"
time { $date timestamp }
data {
node1 {
child1 getNode("node1","child1").toInteger()
child2 getNode("node1","child2").toInteger()
child3 getNode("node1","child3").toInteger()
}
node2 {
child1 getNode("node1","child1").toInteger()
child2 getNode("node1","child2").toInteger()
child3 getNode("node1","child3").toInteger()
}
}
}
我想做的是遍历 XML 并在 JSON 文档中动态创建节点。考虑到我在现实生活中要处理数百个节点,将这些都硬编码到 JsonBuilder 中并不是很理想。我已尝试执行以下操作,但它不起作用。希望它能让您了解我正在尝试的方向:
def json = new JsonBuilder()
def root = json {
type "test"
time { $date timestamp }
data {
parser.data.childNodes().each {
it.name {
it.childNodes().each {
it.name it.text()
}
}
}
}
}
【问题讨论】: