2016-08-05 38 views
1

我是groovy的新手。我試圖運行這個Groovy腳本:groovy.lang.MissingMethodException:沒有方法的簽名:groovy.util.slurpersupport.NodeChild.add()

def inxml = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <doc><extension source='ExtractTextStage'>" +     
"<field name='DC.Date.Modified'>2006-04-13</field><field name='dc.date'>01-01-2016</field><field name='dc.language'>EN</field></extension>"+ 
"<extension source='you'>" +     
"<field name='dc.date'>02-02-2015</field><field name='dc.language'>EN</field></extension></doc>" 

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

def date = doc.extension.find{ extension-> [email protected]='ExtractTextStage'}.field.find { field->[email protected] == "DC.Date.Modified" } 

doc.add("last_modified", date) 

print doc​;​ 

,但我得到這個錯誤:

groovy.lang.MissingMethodException: No signature of method: groovy.util.slurpersupport.NodeChild.add() is applicable for argument types: (java.lang.String, groovy.util.slurpersupport.NodeChild) values: [last_modified, 2006-04-13] 
Possible solutions: any(), wait(), name(), pop(), min(), tail() 
    at Script1.run(Script1.groovy:10) 

我想在我的XML添加一個新字段命名爲「LAST_MODIFIED」併爲其分配與「DC.Date.Modified」字段值相同的值。任何幫助,將不勝感激。

回答

2

認爲你需要做這樣的事情:

def inxml = '''<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
       |<doc> 
       | <extension source='ExtractTextStage'> 
       |  <field name='DC.Date.Modified'>2006-04-13</field> 
       |  <field name='dc.date'>01-01-2016</field> 
       |  <field name='dc.language'>EN</field> 
       | </extension> 
       | <extension source='you'> 
       |  <field name='dc.date'>02-02-2015</field> 
       |  <field name='dc.language'>EN</field> 
       | </extension> 
       |</doc>'''.stripMargin() 

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

def date = doc.extension 
       .find { extension -> [email protected]='ExtractTextStage'} 
       .field 
       .find { field -> [email protected] == "DC.Date.Modified" } 

def newNode = new XmlSlurper().parseText("<last_modified>$date</last_modified>") 

doc.appendNode(newNode) 

println groovy.xml.XmlUtil.serialize(doc) 
+0

非常感謝。我會試試這個,讓你知道 – Rose

+0

謝謝蒂姆。它像一個魅力 – Rose

相關問題