使用Groovy附加到xml文件的属性值

使用Groovy附加到xml文件的属性值,xml,grails,groovy,Xml,Grails,Groovy,xml的一个示例: <response version-api="2.0"> <value> <books> <book available="20" id="1" tags=""> <title>Don Xijote</title> <author id="1" tags="Joel">Manuel

xml的一个示例:

<response version-api="2.0">
    <value>
        <books>
            <book available="20" id="1" tags="">
                <title>Don Xijote</title>
                <author id="1" tags="Joel">Manuel De Cervantes</author>
            </book>
            <book available="14" id="2" tags"Jane">
                <title>Catcher in the Rye</title>
               <author id="2" tags="">JD Salinger</author>
           </book>
           <book available="13" id="3" tags="">
               <title>Alice in Wonderland</title>
               <author id="3">Lewis Carroll</author>
           </book>
           <book available="5" id="4" tags="Harry">
               <title>Don Xijote</title>
               <author id="4">Manuel De Cervantes</author>
           </book>
       </books>
   </value>
</response>

有人知道我如何做到这一点吗?

你差点就做到了。。。这应该是你想要的(假设我有正确的一端):

defxml=''
|    
|        
|            
|唐·西约特
|曼努埃尔·德塞万提斯
|            
|            
|麦田守望者
|JD塞林格
|           
|           
|爱丽丝梦游仙境
|刘易斯·卡罗尔
|           
|           
|唐·西约特
|曼努埃尔·德塞万提斯
|           
|       
|   
|''.stripMargin()
导入groovy.xml*
def parsed=new XmlParser().parseText(xml)
已解析。“**”
.findAll{it.attributes().keySet().toList()中的'tags'
.each{it@tags+=(it@tags?'':'')+'extraTag'}
println XmlUtil.serialize(已解析)
您可以使用XmlParser(而不是XmlSlurper)

import groovy.util.XmlParser
def输入=“”
唐·西约特
曼努埃尔·德塞万提斯
麦田守望者
塞林格
爱丽丝梦游仙境
刘易斯·卡罗尔
唐·西约特
曼努埃尔·德塞万提斯
'''
def xml=new XmlParser().parseText(输入)
xml.'**'.findAll{if(it.@tags!=null)it.@tags=it.@tags+'-hello'}
findAll()
之后,将修改标记属性

    def rootFolder = new File('.').getCanonicalPath()
    def response = new XmlSlurper().parse(new File(rootFolder + File.separator + 'src' + File.separator + 'metadata.xml'))
    def tags = response.'**'.findAll { it['@tags']!='' }

    tags.each{ t ->
        def tagAttr =  (t.@tags.value.toString())
        println(tagAttr)
    }
def xml = '''<response version-api="2.0">
            |    <value>
            |        <books>
            |            <book available="20" id="1" tags="">
            |                <title>Don Xijote</title>
            |                <author id="1" tags="Joel">Manuel De Cervantes</author>
            |            </book>
            |            <book available="14" id="2" tags="Jane">
            |                <title>Catcher in the Rye</title>
            |               <author id="2" tags="">JD Salinger</author>
            |           </book>
            |           <book available="13" id="3" tags="">
            |               <title>Alice in Wonderland</title>
            |               <author id="3">Lewis Carroll</author>
            |           </book>
            |           <book available="5" id="4" tags="Harry">
            |               <title>Don Xijote</title>
            |               <author id="4">Manuel De Cervantes</author>
            |           </book>
            |       </books>
            |   </value>
            |</response>'''.stripMargin()

import groovy.xml.*

def parsed = new XmlParser().parseText(xml)        

parsed.'**'
      .findAll { 'tags' in it.attributes().keySet().toList() }
      .each { it.@tags += (it.@tags ? ' ' : '') + 'extraTag' }

println XmlUtil.serialize(parsed)
import groovy.util.XmlParser

def input = '''
<response version-api="2.0">
    <value>
        <books>
            <book available="20" id="1" tags="">
                <title>Don Xijote</title>
                <author id="1" tags="Joel">Manuel De Cervantes</author>
            </book>
            <book available="14" id="2" tags="Jane">
                <title>Catcher in the Rye</title>
               <author id="2" tags="">JD Salinger</author>
           </book>
           <book available="13" id="3" tags="">
               <title>Alice in Wonderland</title>
               <author id="3">Lewis Carroll</author>
           </book>
           <book available="5" id="4" tags="Harry">
               <title>Don Xijote</title>
               <author id="4">Manuel De Cervantes</author>
           </book>
       </books>
   </value>
</response>
'''

def xml = new XmlParser().parseText(input)

xml.'**'.findAll { if(it.@tags != null) it.@tags = it.@tags + '-hello' }