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

发布于 2024-07-12 22:24:41 字数 158 浏览 8 评论 0原文

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

<foo>
  <bar/>
</foo>

如何检查bar元素是否存在?

I'm trying to determine whether an XML element exists with Groovy's XmlSlurper. Is there a way to do this? For example:

<foo>
  <bar/>
</foo>

How do I check whether the bar element exists?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

书间行客 2024-07-19 22:24:41

API 有点奇怪,但我认为有一些更好的方法来寻找孩子。 当您请求“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())

The API is a little screwy, but I think that there are a couple of better ways to look for children. What you're getting when you ask for "xml.bar" (which exists) or "xml.quux" which doesn't, is a groovy.util.slurpersupport.NodeChildren object. Basically a collection of nodes meeting the criteria that you asked for.

One way to see if a particular node exists is to check for the size of the NodeChildren is the expected size:

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

Another way would be to use the find method and see if the name of the node that gets returned (unfortunately something is always returned), is the one you were expecting:

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())
一刻暧昧 2024-07-19 22:24:41

GPathResult 上的 isEmpty 方法有效。

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

这让我很困扰,因为 bar 元素空的 - 它没有主体。 但我认为 GPathResult 不为空,所以也许这是有道理的。

The isEmpty method on GPathResult works.

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

This bothers me, because the bar element is empty - it doesn't have a body. But I suppose the GPathResult isn't empty, so maybe this makes sense.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文