2016-06-24 91 views
0

因此,我在Groovy中創建了一個腳本,用於解析一個非常大的XML文件,附加一些內容並在每次附加內容時稍微更改每個元素。每個元素都有一個與它相關的ID號,我想這樣做以便每次添加一個元素時,ID號將=文件+1中最高的ID號。我將展示給一小片的代碼將有助於理解:計算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

假設你已經解析該XML用的XmlSlurper或XMLParser中,你應該能夠與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」所需的更改 –