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

Posted

技术标签:

【中文标题】需要在 groovy 中获取具有特定子节点的 XML 节点的索引【英文标题】:Need to get the Index of a XML node with specific child in groovy 【发布时间】:2021-09-14 23:39:00 【问题描述】:

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

在此示例中,我的代码应返回索引 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>

【问题讨论】:

请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。 【参考方案1】:

也许

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)

【讨论】:

以上是关于需要在 groovy 中获取具有特定子节点的 XML 节点的索引的主要内容,如果未能解决你的问题,请参考以下文章

读取具有多个名称空间的子节点

XML 使用 SelectNodes 来获取具有空值子节点的节点

Python爬虫编程思想(52):使用Beautiful Soup选择子节点

如果条目丢失,则使用 groovy 查找并添加内部级别子节点

xpath按元素和属性查找节点,其中包含具有特定id的子元素

如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序