Понятия не имею, что такое replaceLast
в Java ... его нет в JDK ... Если бы он был в JDK, вы могли бы использовать его в Groovy ...
В любом случае, как насчет использованияанализатор XML для изменения XML вместо использования регулярного выражения?
При наличии некоторого xml:
def xml = '''<Header>
<TransactionId>1</TransactionId>
<SessionId>1</SessionId>
<User>
<Name>Bob</Name>
</User>
<Sender>
<Name>Joe</Name>
</Sender>
<Something>
<Name>Tim</Name>
</Something>
</Header>'''
Вы можете проанализировать его с помощью Groovy XmlParser:
import groovy.xml.*
def parsed = new XmlParser().parseText(xml)
Затем вы можете выполнить поиск в глубину для всех узлов с именем Name
и взять последний -1
один:
def lastNameNode = parsed.'**'.findAll { it.name() == 'Name' }[-1]
Затем установите значение в новую строку:
lastNameNode.value = 'Yates'
И распечатать новый XML:
println XmlUtil.serialize(parsed)
<?xml version="1.0" encoding="UTF-8"?><Header>
<TransactionId>1</TransactionId>
<SessionId>1</SessionId>
<User>
<Name>Bob</Name>
</User>
<Sender>
<Name>Joe</Name>
</Sender>
<Something>
<Name>Yates</Name>
</Something>
</Header>