需要在 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 查找并添加内部级别子节点