当前位置: 首页 > 知识库问答 >
问题:

Soap UI ad一个要请求的节点(Groovy)

叶煌
2023-03-14

我有麻烦了。

     <node1>
        <subnode1>data</subnode1>
        <subnode2>data</subnode2>

        <subnode3>data</subnode3>
        <subnode4>data</subnode4>

        <!--Zero or more repetitions:-->
        <subnode5>
           <subsubnode1>data</subsubnode1>
           <subsubnode2>data</subsubnode2>
           <subsubnode3>data</subsubnode3>
        </subenode5>
     </node1> 
import com.eviware.soapui.support.XmlHolder;
import com.eviware.soapui.support.GroovyUtils;

def groovyUtil = new GroovyUtils( context )
def holder = groovyUtil.getXmlHolder( "name#Request" )
def parentnode  = holder.getDomNode( "//node1" )

def text    = '''
            <subnode5>
             <subsubnode1>data</subsubnode1>
             <subsubnode2>data</subsubnode2>
             <subsubnode3>data</subsubnode3>
            </subnode5>
           '''.stripMargin()

 def nodetext = groovyUtil.getXMLHolder( text )
 def nodeItem = nodetext.getDomNode ( "//subnode5")
 parentnode.appendChild(nodeItem, true)
 holder.updateProperty()
  <node1>
    <subnode1>data</subnode1>
    <subnode2>data</subnode2>

    <subnode3>data</subnode3>
    <subnode4>data</subnode4>

    <subnode5>
       <subsubnode1>data</subsubnode1>
       <subsubnode2>data</subsubnode2>
       <subsubnode3>data</subsubnode3>
    </subenode5>
    --first repition--
    <subnode5>
       <subsubnode1>data</subsubnode1>
       <subsubnode2>data</subsubnode2>
       <subsubnode3>data</subsubnode3>
    </subenode5>
   --second repition--
    <subnode5>
       <subsubnode1>data</subsubnode1>
       <subsubnode2>data</subsubnode2>
       <subsubnode3>data</subsubnode3>
    </subenode5>
    .... and so on 
 </node1> 

共有1个答案

夏经武
2023-03-14

这里有一个路线图--你需要调整它来适应你的特殊需求!

import com.eviware.soapui.support.GroovyUtils

// create groovyUtils and XmlHolder for request
def grUtils = new GroovyUtils(context)
def requestHolder = grUtils.getXmlHolder("name#Request")

// find the Node that I am interested in
def requestNode = requestHolder.getDomNode("//*:node1")
// the Document object is used to create new nodes
def requestDoc = requestNode.getOwnerDocument()

// create the whole structure 3 times
3.times {

    // create a new Element in the Document
    def subelement5 = requestDoc.createElement("subnode5")
    def subnode5 = requestNode.insertBefore(subelement5, requestNode.getFirstChild())

    // create the sub-sub nodes
    1..3.each {
        def subsubelement = requestDoc.createElement("subsubnode${it}")
        subnode5.insertBefore(subsubelement, subnode5.getFirstChild())
        // add in the data text
        subsubelement.appendChild(requestDoc.createTextNode("data"))
    }
}

// write the Document out to the request
requestHolder.updateProperty(true)

如果感兴趣,这里有一些额外的阅读。

 类似资料:
  • 问题内容: 想象一下,客户端应用程序需要访问Cassandra集群。在Java api中,我们创建一个集群实例,并通过Session发送读取或写入请求。如果我们使用读/写一致性ONE,则api如何选择实际节点(协调器节点)以转发请求。是随机选择吗?请帮忙弄清楚。 问题答案: Cassandra驱动程序使用“ gossip”协议(以及称为节点发现的过程)来获取有关群集的信息。如果某个节点不可用,则客

  • 问题内容: 如何使用与以下代码等效的node.js发出Http请求: 问题答案: 使用http客户端。 遵循以下原则:

  • 我从一个根有两个节点,我想在一个请求中删除这两个节点的数据。两个子节点具有相同的密钥。我试过这个: 但是它只从第一个节点删除数据

  • 问题内容: 我正在使用出色的Request库在Node中下载我正在使用的小型命令行工具中的文件。Request非常适合拉入单个文件,完全没有问题,但不适用于ZIP。 例如,我正在尝试下载URL上的Twitter Bootstrap 存档: 该代码的相关部分是: 我也尝试将编码设置为“二进制”,但没有运气。实际的zip约为74KB,但是通过上述代码下载时约为134KB,并在Finder中双击以提取它

  • 我正在尝试在后端节点中发出http请求。js web app。我可以在前端web javascript文件上发出成功的完整http请求,如下所示: 并遵循本指南:https://nodejs.dev/learn/make-an-http-post-request-using-nodejs 我一直试图在node中发出相同的请求。js后端: 但运行上述请求会导致以下错误: 我设置url/path设置的

  • 尝试使用PUT请求更新数据。但是,数据没有更新和返回邮递员中的以前的数据。 邮递员提出要求: 邮递员回复: 我也尝试过使用findByIdAndUpdate。没有得到结果。任何帮助都将不胜感激。 控制器: 路由器: