Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GPathResult..是否存在节点_Java_Xml_Xpath_Groovy_Gpath - Fatal编程技术网

Java GPathResult..是否存在节点

Java GPathResult..是否存在节点,java,xml,xpath,groovy,gpath,Java,Xml,Xpath,Groovy,Gpath,我的GPathResult可以通过以下三种方式之一拥有名称节点 1) 名称节点存在并且具有值 例:约翰 2) 名称节点存在,但其中没有值。 3) 根本不存在名称节点 在Groovy代码中,如何使用Gpathresult区分上述三种情况。我是否使用gPathResult之类的东西。value()=空的 比苏多代码: if(name node is present and has a value){ do this } if(name node exists, but has no value

我的GPathResult可以通过以下三种方式之一拥有名称节点

1) 名称节点存在并且具有值 例:约翰

2) 名称节点存在,但其中没有值。

3) 根本不存在名称节点

在Groovy代码中,如何使用Gpathresult区分上述三种情况。我是否使用gPathResult之类的东西。value()=空的

比苏多代码:

if(name node is present and has a value){
do this
}

if(name node exists, but has no value in it){
do this
}

if( No name node exists at all){
do this
}

测试gpath结果是否为null以检查是否存在,并对元素值使用
.text()
方法(如果没有值,则为空字符串)。 下面是一个例子:

def xml="<a><b>yes</b><c></c></a>"
def gpath = new XmlParser().parse(new ByteArrayInputStream(xml.getBytes())) 
["b", "c", "d" ].each() {
    println it
    if (gpath[it]) {
        println "  exists"
        println gpath[it].text() ? "  has value" : "   doesn't have a value"
    } else {
        println "  does not exist"
    }
}
def xml=“是”
def gpath=new XmlParser().parse(new ByteArrayInputStream(xml.getBytes()))
[“b”、“c”、“d”]各(){
打印它
if(gpath[it]){
println“存在”
println gpath[it].text()?“有值”:“没有值”
}否则{
println“不存在”
}
}

(使用
gpath[it]
符号是因为变量替换,如果您查找特定元素,如
b
,则可以使用
gpath.b

您必须测试
size()
。 为了继续使用Olivier的示例,刚刚修复了使用
GPathResult
的问题,并且它可以与
XmlSlurper
XmlParser
一起使用,这里的代码是:

def xml="<a><b>yes</b><c></c></a>"
def gpath = new XmlSlurper().parse(new ByteArrayInputStream(xml.getBytes())) 
["b", "c", "d" ].each() {
    println it
    if (gpath[it].size()) {
        println "  exists"
        println gpath[it].text() ? "  has value" : "   doesn't have a value"
    } else {
        println "  does not exist"
    }
}
def xml=“是”
def gpath=new XmlSlurper().parse(new ByteArrayInputStream(xml.getBytes()))
[“b”、“c”、“d”]各(){
打印它
if(gpath[it].size()){
println“存在”
println gpath[it].text()?“有值”:“没有值”
}否则{
println“不存在”
}
}

XmlParser不返回
GPathResult
,而是返回
节点
。在这个问题的范围内,这两种行为是不同的,因为您的else路径永远不会被触发。Vamper是正确的,它是一个包含有关
XmlParser
Node
的一些信息的文档,而不是
XmlSlurper
GPathResult