如何使用Groovy迭代xml节点?

时间:2009-09-22 15:06:59

标签: xml groovy soapui

开始使用SoapUI,无法了解如何使用Groovy处理Soap响应。 目前我的项目在NetBeans中打开,并且在debuging之后将被复制粘贴到SoapUI(eviware) 我的问题是:

def Input = """ <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body>
      <ns2:getSalesAuditsResponse xmlns:ns2="http://apidto.dto.t2.wsapi.ng.com/">
         <return>
            <code>0909019000004830</code>
            <realOpenAmount>12</realOpenAmount>
            <dueDate>2009-07-11T00:00:00+03:00</dueDate>
         </return>
         <return>
            <code>0909119000006260</code>
            <realOpenAmount>55.75</realOpenAmount>
            <dueDate>2007-02-11T00:00:00+02:00</dueDate>
         </return>
      </ns2:getSalesAuditsResponse>    </S:Body> </S:Envelope>
    """

如何找到具有特定dueDate的“return”节点? 我可以假设,它可能接近下一个:

def document = new groovy.util.XmlSlurper().parseText(Input);
def sa = document.depthFirst().findAll { it.@dueDate=="2007-02-01T00:00:00+02:00" }

但在这种情况下,sa是[]。 毕竟如何删除原始XML中找到的节点?

我正在尝试使用XMLHolder,但不知道如何在Netbeans“context”变量中初始化它,它在SoapUI中确实存在。

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(??? context ???) def dataHolder = groovyUtils.getXmlHolder(输入) def data = dataHolder.getDomNode(“// return [dueDate =”2007-02-11T00:00:00 + 02:00“]”)

最后一般问题: 是否可以在NetBeans中调试groovy脚本并在以后的SoapUI 3.0.1中使用它? 或者根据需要为groovy_for_SoapUI提供代码自动完成和doc?

非常感谢

1 个答案:

答案 0 :(得分:0)

它。@ dueDate引用了“dueDate”属性,而不是节点。其次,你在代码中寻找“2007-02-01 ...”,它应该是“2007-02-11 ...”以匹配输入XML中的实际节点,我猜。

所以,这确实有效:

def Input = """ <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
        <ns2:getSalesAuditsResponse xmlns:ns2="http://apidto.dto.t2.wsapi.ng.com/">
           <return>
              <code>0909019000004830</code>
              <realOpenAmount>12</realOpenAmount>
              <dueDate>2009-07-11T00:00:00+03:00</dueDate>
           </return>
           <return>
              <code>0909119000006260</code>
              <realOpenAmount>55.75</realOpenAmount>
              <dueDate>2007-02-11T00:00:00+02:00</dueDate>
           </return>
       </ns2:getSalesAuditsResponse>
     </S:Body>
    </S:Envelope>
    """
def document = new groovy.util.XmlSlurper().parseText(Input);
def sa = document.depthFirst().findAll {it.dueDate == "2007-02-11T00:00:00+02:00"}

如果我打算修改XML,我想我最终会使用标准的MarkupBuilder或StreamingMarkupBuilder以我想要的形式输出新的XML。