Как прочитать узел xml и заменить значение узла в groovy скрипте? - PullRequest
0 голосов
/ 30 октября 2019

Я ищу Groovy для кода ниже требуется.

Мне нужно прочитать узел Xml и заменить значение узла некоторым значением. скажем, мне нужно заменить число на $.

Ввод XML:

<?xml version='1.0' encoding='UTF-8'?><person>
<dob>19-01-1987</dob>
<nationalidinformation>
    <nationalid>14-9875-6a</nationalid>
</nationalidinformation>
</person>

Ожидаемый XML:

<?xml version='1.0' encoding='UTF-8'?><person>
<dob>$$-$$-$$$$</dob>
<nationalidinformation>
    <nationalid>$$-$$$$-$a</nationalid>
</nationalidinformation>
</person>

Пожалуйста, помогите мне с кодом, чтобы получить это. Спасибозаранее

def Message processData(Message message) {
  def body_xml= message.getBody(java.lang.String) as String
  Node root = new XmlParser().parseText(body_xml)
  root.'**'.findAll { it.name.text() == 'dob' }.toString().replaceAll("\\d", "$")
  def xml = XmlUtil.serialize(root)
  message.setBody(xml)
  return message
} 

1 Ответ

0 голосов
/ 30 октября 2019

Хорошо, я не знаю, что такое Message, но при условии, что вы можете назвать getBody() и setBody(x) на нем, должно работать следующее (я добавил комментарии, чтобы объяснить изменения):

import groovy.xml.*

// Don't need a def, as we're specifying a type
Message processData(Message message) {

  // This is shorter than you had it, and should still work  
  String body_xml = message.getBody(String)

  def root = new XmlParser().parseText(body_xml)

  // Find the first <dob> element, and set it's value to $
  root.'**'.find { it.name() == 'dob' }.value = '$'

  // Serialize it back (this will call setBody())
  message.body = XmlUtil.serialize(root)

  // Last line returns the value, no need for `return`
  message
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...