需要在 groovy 中获取具有特定子节点的 XML 节点的索引

Need to get the Index of a XML node with specific child in groovy

我是 groovy 脚本编写的新手,我很难解决这个问题。我需要一个 body 元素的索引,其中是一个带有错误消息的子元素。我尝试使用 findIndexValues(),但没有得到我需要的结果

在此示例中,我的代码应 return 索引 0 和 2 。

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <Response>
    <body>
      <success>false</success>
      <errors>
        <statusCode>INVALID_EMAIL_ADDRESS</statusCode>
        <message>Wrong E-Mail</message>
        <fields>EMail</fields>
      </errors>
      <created>false</created>
    </body>
     <body>
      <id>0015r00000DiP5HAAV</id>
      <success>true</success><errors/>
      <created>false</created>
    </body>
    <body>
      <success>false</success>
      <errors>
        <statusCode>INVALID_EMAIL_ADDRESS</statusCode>
        <message>Wrong E-Mail</message>
        <fields>EMail</fields>
      </errors>
      <created>false</created>
    </body><httpHeaders/>
    <httpStatusCode>200</httpStatusCode>
    <referenceId>UpdateAccount</referenceId>
  </Response>
</root>

也许是

def root = new XmlSlurper().parseText(
    '''<root>
  <Response>
    <body>
      <success>false</success>
      <errors>
        <statusCode>INVALID_EMAIL_ADDRESS</statusCode>
        <message>Wrong E-Mail</message>
        <fields>EMail</fields>
      </errors>
      <created>false</created>
    </body>
     <body>
      <id>0015r00000DiP5HAAV</id>
      <success>true</success><errors/>
      <created>false</created>
    </body>
    <body>
      <success>false</success>
      <errors>
        <statusCode>INVALID_EMAIL_ADDRESS</statusCode>
        <message>Wrong E-Mail</message>
        <fields>EMail</fields>
      </errors>
      <created>false</created>
    </body><httpHeaders/>
    <httpStatusCode>200</httpStatusCode>
    <referenceId>UpdateAccount</referenceId>
  </Response>
</root>''')

def bodyIndices = root.Response.body.findIndexValues({ b -> b.errors.message.size() > 0 })

print(bodyIndices)