嘗試用:
def str = '''<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
'''
str.replaceAll(/[0-9]+/) {
Math.abs(new Random().nextInt() % 10) + 1
}
UPDATE
然後嘗試類似:
def str = '''<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
'''
str.replaceAll(/\<TargetValue\>\d+\<\/TargetValue\>/) {
'<TargetValue>' + (Math.abs(new Random().nextInt() % 10) + 1) + '</TargetValue>'
}
更新2
由於@tim_yates建議,最好使用XmlSlurper
比正則表達式,但你需要一個良好的XML解析,所以在你的例子你的XML需要一個根節點得到很好的形成。
def str = '''<root>
<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
</root>
'''
def xml = new XmlSlurper().parseText(str)
xml.'**'.findAll {
it.name() == 'TargetValue'
}.each {
it.replaceBody(Math.abs(new Random().nextInt() % 10) + 1)
}
println XmlUtil.serialize(xml)
這個腳本日誌:然後,你可以爲你使用正則表達式使用XmlSlurper
做同樣的
<?xml version="1.0" encoding="UTF-8"?>
<root>
<TargetValue>8</TargetValue>
<TargetValue>3</TargetValue>
<TargetValue>6</TargetValue>
</root>
希望它能幫助,
shoul You不要用正則表達式解析XML。看看XmlSlurper或XmlParser –