当前位置:  开发笔记 > Android > 正文

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

如何解决《如何使用Groovy的XmlSlurper检查元素是否存在?》经验,为你挑选了2个好方法。

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


  

如何检查条形元素是否存在?



1> Ted Naleid..:

API有点棘手,但我认为有几种更好的方法来寻找孩子.当你要求"xml.bar"(存在)或"xml.quux"时,你得到的是groovy.util.slurpersupport.NodeChildren对象.基本上是符合您要求的标准的节点集合.

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

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

另一种方法是使用find方法,看看返回的节点的名称(不幸的是总是返回一些东西)是你期望的那个:

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


至少从Groovy 1.8.6开始,`GPathResult`有一个方法`boolean isEmpty()`,实现为`return size()== 0;`

2> Josh Brown..:

GPathResult上的isEmpty方法有效.

def text = ""
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

这让我感到困扰,因为条形元素空的 - 它没有身体.但我认为GPathResult不是空的,所以这可能是有道理的.


我更喜欢size()方法,因为我觉得它有点不那么混乱,但是isEmpty返回false的原因是因为它正在讨论返回的NodeChildren集合.它不是空的,因为有一个"bar",并且isEmpty对于xml.quux是正确的,因为没有一个quux
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有