2016-06-24 2 views
0

本当に大きなXMLファイルを解析し、いくつかの要素を追加し、追加するたびに各要素をわずかに変更するスクリプトをGroovyで作っています。これらの各要素にはID番号が関連付けられており、要素が追加されるたびにID番号はファイルの最上位のID番号+1になります。私が理解するのに役立ちますように、コードの小さな作品を紹介します。この場合Groovyで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> 

を、私はリストに要素(トランスユニット)を追加した場合、IDが22である必要がある私が持っています解析して追加するアルゴリズムですが、毎回IDを増やす方法がわかりません。ここでも、私はGroovyを使ってこれを行っています。誰にもアイデアはありますか?前もって感謝します!!

答えて

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'*[email protected]*.text().collect { it as Integer }.max() 

assert next == 22 

XmlParserを使用するには、あなたが行を変更する必要があります

def next = 1 + x.file.body.'trans-unit'*[email protected] { it as Integer }.max() 
+0

私は答えを感謝しますが、XmlParser()で同じように動作しないようですか?たぶん私は間違ったことをしているのかもしれない – awallace04

+0

@ awallace04は、 'XmlParser'に必要な変更を追加しました –