Dom Node - getChildNodes()方法似乎不起作用

时间:2015-10-07 07:19:58

标签: xml dom groovy soapui

我使用以下代码获取xml请求标记的Child节点。但是node1和node2都给出了相同的结果。我不明白为什么。

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder("StepName#Request")
def node1 = holder.getDomNode("//*:SomeTag").getChildNodes().toString()
def node2 = holder.getDomNode("//*:SomeTag").toString()
log.info node1==node2 //retuns true

1 个答案:

答案 0 :(得分:1)

对于两种情况,

toString()表示都返回相同的但是这并不意味着两个函数返回相同的情况。但是在这种情况下你是对的,两个对象看起来都是平等的,我试着解释一下:

XmlHolder.getDomNode()返回一个对象实例 org.w3c.dom.Node界面。 Node.getChildNodes()返回org.w3c.dom.NodeList接口的实例,其中包含此节点中包含的节点列表。

正如您在上面的API链接中看到的那样,两个方法最初似乎返回实现不同接口的对象,但是在此上下文执行中,两个对象都是:org.apache.xmlbeans.impl.store.Xobj$ElementXobj的实例,是的,它们是等于的。

def xml = '''<root>
    <SomeTag><myTag>a</myTag><myTag>b</myTag></SomeTag>
</root>
'''

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(xml)
def node1 = holder.getDomNode("//*:SomeTag").getChildNodes()
def node2 = holder.getDomNode("//*:SomeTag")

log.info (node1.getClass().getName()) // prints org.apache.xmlbeans.impl.store.Xobj$ElementXobj
log.info (node2.getClass().getName()) // prints org.apache.xmlbeans.impl.store.Xobj$ElementXobj

log.info node1.equals(node2) // true

请注意,这取决于运行此代码的上下文(类路径上还有其他库实现等),这两个对象可能不相等。

当您评论是否只想使用子节点时,您可以使用例如each在这两种对象中迭代:

def xml = '''<root>
    <SomeTag><myTag>a</myTag><myTag>b</myTag></SomeTag>
</root>
'''
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(xml)
def node1 = holder.getDomNode("//*:SomeTag").getChildNodes()
def node2 = holder.getDomNode("//*:SomeTag")

node1.each{
    log.info it.toString()
}

node2.each{
    log.info it.toString()
}

此代码记录:

// node 1 each
Wed Oct 07 21:26:07 CEST 2015:INFO:<?xml version="1.0" encoding="UTF-8"?>
<myTag>a</myTag>
Wed Oct 07 21:26:07 CEST 2015:INFO:<?xml version="1.0" encoding="UTF-8"?>
<myTag>b</myTag>
// node 2 each
Wed Oct 07 21:26:07 CEST 2015:INFO:<?xml version="1.0" encoding="UTF-8"?>
<myTag>a</myTag>
Wed Oct 07 21:26:07 CEST 2015:INFO:<?xml version="1.0" encoding="UTF-8"?>
<myTag>b</myTag>

希望它有所帮助,