2014-09-29 72 views
0

我有一些XML文件,我想改变,如果名==测试名。所以我写了这样的东西,但它不起作用。我犯了什么错误?它打印给我参数类型不匹配,我不知道为什么。Groovy的XMLParser中 - 更新节点文本

String xmlData = " 
    <logger> 
     <logLevel> 
     <id>1</id> 
     <idn>id1</idn> 
     <name>testName</name> 
     <level>warn</level> 
     <logLevelsPos> 
      <package id="97724539"> 
      <packName>package1</packName> 
      </package> 
      <package id="98264591"> 
      <packName>package2</packName> 
      </package> 
     </logLevelsPos> 
     </logLevel> 
     <logLevel> 
     <id>2</id> 
     <idn>id2</idn> 
     <name>nameName</name> 
     <level>error</level> 
     <logLevelsPos> 
      <package id="12732539"> 
      <packName>package2</packName> 
      </package> 
      <package id="43264591"> 
      <packName>package5</packName> 
      </package> 
     </logLevelsPos> 
     </logLevel> 
    </logger>"; 

def loggr = new groovy.util.XmlParser().parseText(xmlData); 
for (def it : loggr.children()){ 
    if(it.name.text().equals("testName")) { 
     it.name.value = "ds"; 
     //argument type mismatch ... 
    } 

回答

4

您必须访问name内的文本节点的值。所以它是it.name[0].value = 'ds'

+0

哦..我很接近:)但为什么[0]?不明白 – Gwalk 2014-09-29 09:41:00

+0

嗯..明白:因为它是一个由1个元素组成的列表 – Gwalk 2014-09-29 09:44:03

+1

在这种情况下是一个。可能还有更多。 – cfrick 2014-09-29 09:44:49