SoapUI / Groovy - 如何在同一个dom中复制一个具有新名称的节点?

时间:2018-05-07 08:49:35

标签: javascript xml dom groovy soapui

我试图从SoapUI响应中获取一些数据以生成新的SoapUI请求。这是我在输入中的反应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetDataResponse>
      <return>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType2>
          <date1>2018-01-30T00:00:00.000+01:00</date1>
          <img>...</img>
        </dataType2>
        <dataType2>
          <date1>2018-01-30T00:00:00.000+01:00</date1>
          <img>...</img>
        </dataType2>
        <dataType3>
        </dataType3>
      </return>
    </GetDataResponse>
  </soap:Body>
</soap:Envelope>

我想要生成的输出是:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <process>
      <workflow1>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType1>
          <img>...</img>
        </dataType1>
        <dataType2>
          <date1>2018-01-30T00:00:00.000+01:00</date1>
          <date2>2018-01-30T00:00:00.000+01:00</date2>
          <img>...</img>
        </dataType2>
        <dataType2>
          <date1>2018-01-30T00:00:00.000+01:00</date1>
          <date2>2018-01-30T00:00:00.000+01:00</date2>
          <img>...</img>
        </dataType2>
        <otherFields>
          <field/>
          <field/>
          <field/>
        </otherFields>
      </process>
    </workflow1>    
  </soap:Body>
</soap:Envelope>

使用SoapUI groovy脚本我能够使用以下代码将我想要的数据从响应中复制到请求中:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def responseHolder = groovyUtils.getXmlHolder( "Step1#Response" )
def requestHolder = groovyUtils.getXmlHolder( "Step2#Request" )

// Remove all dataType1 from the request dom
for( item in requestHolder.getDomNodes( "//process/workflow1/dataType1" )){
  requestHolder.removeDomNodes("//"+item.nodeName)
}
// Remove all dataType2 from the request dom
for( item in requestHolder.getDomNodes( "//process/workflow1/dataType2" )){
  requestHolder.removeDomNodes("//"+item.nodeName)
}

def parentNode = requestHolder.getDomNode("//process/workflow1")
def otherFields = requestHolder.getDomNode("//process/workflow1/otherFields")
// Copy dataType1 into the request dom
for( item in responseHolder.getDomNodes( "//return/dataType1" )){
  def newNode = parentNode.getOwnerDocument().importNode(item,true)
  parentNode.insertBefore(newNode,otherFields)
}
// Copy dataType2 into the request dom
for( item in responseHolder.getDomNodes( "//return/dataType2" )){
  def newNode = parentNode.getOwnerDocument().importNode(item,true)
  parentNode.insertBefore(newNode,otherFields)
}

for( item in requestHolder.getDomNodes( "//process/workflow1/dataType2" )){
  // Copy //process/workflow1/dataType2/date1 to //process/workflow1/dataType2/date2
}


// Update the request
requestHolder.updateProperty()
context.requestContent = requestHolder.xml

但是现在,我想将dataType2.date1复制到一个名为dataType2.date2的新节点,我无法做到。 我不知道如何在date1之后复制和插入这个新节点。我试图使用item来获取子节点,但我尝试的每个函数都没有定义,或者我使用的对象不是好的...

任何帮助?

0 个答案:

没有答案