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>
基本上我试图将我选择的字符串值附加到所有名为“tags”的属性。这是“tags”属性是否具有值,并且属性是否位于xml结构的不同级别。我已经尝试了方法appendNode()但是吐出了一个groovy运行时表达式错误。我也看过这个http://blog.thefourthparty.com/stopping-time-in-postgresql/,但我没有接近我需要的答案。这是代码:
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)
}
任何人都知道如何实现这个目标?
答案 0 :(得分:0)
你几乎得到了......这应该做你想要的(假设我有正确的结束):
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)
答案 1 :(得分:0)
您可以使用XmlParser(而不是XmlSlurper)。
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' }
在findAll()
之后,将修改标签属性。