所以我在Groovy中创建一个脚本来解析一个非常大的XML文件,附加一些东西并在每次附加时略微更改每个元素。这些元素中的每一个都有一个与之关联的ID号,我想这样做,以便每次附加一个元素时,ID号将=文件+1中的最高ID号。我将展示一小段代码,以帮助理解:
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="xyxy" version="1.1">
<file original="zzz.js" source-language="en" target-language="en" datatype="javascript">
<body>
<trans-unit id="20" resname="foo">
<source>foofoo</source>
<target>foofoo</target>
</trans-unit>
<trans-unit id="21" resname="blah">
<source>blahblah</source>
<target>blahblah</target>
</trans-unit>
</body>
</file>
</xliff>
在这种情况下,如果我在列表中添加了一个元素(trans-unit),那么ID必须是22.我有一个解析和追加的算法,但我不知道如何增加每个ID时间。我再次使用Groovy来做到这一点。有没有人有想法?在此先感谢!!
答案 0 :(得分:0)
假设您已使用xmlslurper或xmlparser解析了该XML,您应该可以在max
的帮助下获取下一个ID:
def xml = '''<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="xyxy" version="1.1">
<file original="zzz.js" source-language="en" target-language="en" datatype="javascript">
<body>
<trans-unit id="20" resname="foo">
<source>foofoo</source>
<target>foofoo</target>
</trans-unit>
<trans-unit id="21" resname="blah">
<source>blahblah</source>
<target>blahblah</target>
</trans-unit>
</body>
</file>
</xliff>'''
def x = new XmlSlurper().parseText(xml)
def next = 1 + x.file.body.'trans-unit'*.@id*.text().collect { it as Integer }.max()
assert next == 22
要使用XmlParser
,您需要将行更改为:
def next = 1 + x.file.body.'trans-unit'*.@id.collect { it as Integer }.max()