在Groovy中拆分XML

3
我有一个长这样的XML文件。
<?xml version="1.0" encoding="UTF-8"?>
<header>
<row>
 <item1>stuff</item1>
 <item2>stuff</item2>
</row>
<row>
 <item1>stuff</item1>
 <item2>stuff</item2>
</row>
...
</header>

I want to read this in

def doc = new XmlSlurper().parseText(message)

然后将每个“行”元素作为单独的消息输出。例如:
<header>
<row1>
     <item1>stuff</item1>
     <item2>stuff</item2>
</row1>
</header>

在Groovy中正确的做法是什么?我应该使用XSLT吗?还是这样做过于复杂了?

1个回答

5
如果你的情况确实如此简单,我会选择Groovy语言,它在这种情况下非常出色。
final xml = '''
    <header>
        <row>
            <item1>stuff11</item1>
            <item2>stuff12</item2>
        </row>
        <row>
            <item1>stuff21</item1>
            <item2>stuff22</item2>
        </row>
    </header>
'''

final xmlDoc = new XmlSlurper().parseText(xml)

阅读文档后,为每一行构建一个文档。
def rowId = 1

String singleRow = new StreamingMarkupBuilder().bind {
    header {
        "row$rowId" {
            mkp.yield xmlDoc.row[rowId-1].children()
        }
    }
}

完成了。


嘿,谢谢你的回复。看起来很简单,但有两个问题。第一个是,每一行都没有ID或任何区别于其他行的东西,除了里面的数据。第二个问题是,mkp.yield是什么? - Steve
@Steve 我尝试按照你给出的输入和输出示例进行操作。如果提供一个实际的示例,我会尝试调整代码。 mkp 是一个特殊的命名空间,用于从正常的构建模式中转移出来,如此解释 - emesx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接