xml - 我如何使用 Groovy 的 XmlSlurper 检查元素是否存在?

标签 xml groovy xmlslurper

我正在尝试确定 XML 元素是否存在于 Groovy 的 XmlSlurper 中。有没有办法做到这一点?例如:

<foo>
  <bar/>
</foo>

如何判断bar元素是否存在?

最佳答案

API 有点古怪,但我认为有一些更好的方法来寻找 child 。当您要求“xml.bar”(存在)或不存在的“xml.quux”时,您得到的是 groovy.util.slurpersupport.NodeChildren目的。基本上是满足您要求的标准的节点集合。

查看特定节点是否存在的一种方法是检查 NodeChildren 的大小是否为预期大小:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert 1 == xml.bar.size()
assert 0 == xml.quux.size()

另一种方法是使用 find 方法并查看返回的节点名称(不幸的是总是返回一些东西),是否是您所期望的:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert ("bar" == xml.children().find( {it.name() == "bar"})?.name())
assert ("quux" != xml.children().find( {it.name() == "quux"})?.name())

关于xml - 我如何使用 Groovy 的 XmlSlurper 检查元素是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480431/

相关文章:

java - 禁用宽度继承?

c# - 在 XML 文档中搜索

java - JSONAssert - 在指定范围内比较

java - 如何创建一个绝妙的 Actor,除非停止,否则它会一直执行

xml - Groovy XmlSlurper 与 XmlParser

java - 在 Android 中旋转文本(不是图像)

jenkins - 为什么在 Jenkinsfile 的 DSL 闭包中使用 `this` 或 `env` 时需要关键字 `param`

html - 如何解决 Groovy 的 XmlSlurper 由于 DOCTYPE 和 DTD 限制而拒绝解析 HTML 的问题?

json - 使用groovy读取json的名称

python - 当使用 XPath 选择另一个节点时,如何引用当前节点的子节点的值? (DDEX相关)