首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SoapUI响应中从XML获取节点值的Groovy。

SoapUI响应中从XML获取节点值的Groovy。
EN

Stack Overflow用户
提问于 2019-08-08 02:26:23
回答 1查看 3K关注 0票数 1

我尝试从XML响应中获取SoapUI中的Groovy脚本中的节点值。XML文件示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://dss.esig.europa.eu/validation/diagnostic" xmlns:ns4="http://dss.esig.europa.eu/validation/simple-report" xmlns:ns5="http://dss.esig.europa.eu/validation/detailed-report">
         <WSReportsDTO>
            <ns3:diagnosticData>
               <ns3:DocumentName>testSigned.pdf</ns3:DocumentName>
               <ns3:ValidationDate>2019-08-08T09:54:34</ns3:ValidationDate>
               <ns3:Signatures>
                  <ns3:Signature Id="id-547ee2a04f4daf63g7e8g784b9920188719ca1f589e514egeg4573c1d1e0ea697b">
                     <ns3:SignatureFilename>testSigned.pdf</ns3:SignatureFilename>
                     <ns3:DateTime>2017-07-05T14:34:34</ns3:DateTime>
                     <ns3:SignatureFormat>PAdES-BASELINE-T</ns3:SignatureFormat>
                     <ns3:StructuralValidation>
                        <ns3:Valid>true</ns3:Valid>
                     </ns3:StructuralValidation>

我尝试使用XmlSlurper,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def slurped = new XmlSlurper().parseText(response);
def status = ${slurped.'ns3:diagnosticData'.'ns3:Signatures'.'ns3:StructuralValidation'.'ns3:Valid'};

我收到了错误消息:

groovy.lang.MissingMethodException:不适用于方法的签名: Script23.$()适用于参数类型:(Script23$_run_closure1)值: Script23$_run_closure1@1e6835可能的解决方案: is(java.lang.Object)、run()、run()、any()、use([Ljava.lang.Object;)、any(groovy.lang.Closure)

之后,我尝试使用这段代码,没有收到任何错误消息,但是属性值在执行后为空。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def slurped = new XmlSlurper().parseText(response);
def indication = slurped.diagnosticData.Signatures.StructuralValidation.Valid;

我也以不同的形式尝试了同样的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def code = new XmlSlurper().parseText(xml)
                           .Body
                           .validateSignatureResponse
                           .WSReportsDTO
                           .diagnosticData
                           .Signatures
                           .Signature
                           .StructuralValidation
                           .Valid
                           .text()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 22:46:34

您可以使用GPath (Groovy的等效XPath )直接进入元素,而不是在层次结构中导航:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def response = '''
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:validateSignatureResponse xmlns:ns2="http://validation.dss.esig.europa.eu/" xmlns:ns3="http://dss.esig.europa.eu/validation/diagnostic" xmlns:ns4="http://dss.esig.europa.eu/validation/simple-report" xmlns:ns5="http://dss.esig.europa.eu/validation/detailed-report">
            <WSReportsDTO>
                <ns3:diagnosticData>
                    <ns3:DocumentName>testSigned.pdf</ns3:DocumentName>
                    <ns3:ValidationDate>2019-08-08T09:54:34</ns3:ValidationDate>
                    <ns3:Signatures>
                        <ns3:Signature Id="id-547ee2a04f4daf63g7e8g784b9920188719ca1f589e514egeg4573c1d1e0ea697b">
                            <ns3:SignatureFilename>testSigned.pdf</ns3:SignatureFilename>
                            <ns3:DateTime>2017-07-05T14:34:34</ns3:DateTime>
                            <ns3:SignatureFormat>PAdES-BASELINE-T</ns3:SignatureFormat>
                            <ns3:StructuralValidation>
                                <ns3:Valid>true</ns3:Valid>
                            </ns3:StructuralValidation>
                        </ns3:Signature>
                    </ns3:Signatures>
                </ns3:diagnosticData>
            </WSReportsDTO>
        </ns2:validateSignatureResponse>
    </soap:Body>
</soap:Envelope>
'''

def parsedXML = new XmlSlurper().parseText(response)
def status = parsedXML.'**'.findAll { it.name() == 'Valid' }
println(status)

请参阅Groovy优点:使用GPath导航获得一个温和的介绍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57410469

复制
相关文章
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
创建 XmlParser 解析器 , 传入 Xml 文件对应的 File 对象 ;
韩曙亮
2023/03/30
7.2K0
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
参考 Xml 生成器 MarkupBuilder , 自定义开发一个 Xml 生成器 ;
韩曙亮
2023/03/30
1.9K0
【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
生成 Xml 数据前 , 首先要将 Xml 数据封装起来 , 先手机 Xml 的各个层级节点的信息 , 最后利用这些节点信息生成 Xml 数据 ;
韩曙亮
2023/03/30
6.2K0
XML获取当前节点信息
%XML.Node的以下字符串属性。提供关于当前节点的信息。 在所有情况下,如果没有当前节点,将抛出一个错误。
用户7741497
2022/07/05
1.6K0
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 删除 Xml 文件中的节点 | 增加 Xml 文件中的节点 | 将修改后的 Xml 数据输出到文件中 )
在 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 ) 博客基础上 , 删除 Xml 文件中的节点信息 ;
韩曙亮
2023/03/30
6.2K0
【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 删除 Xml 文件中的节点 | 增加 Xml 文件中的节点 | 将修改后的 Xml 数据输出到文件中 )
【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
在之前的博客中 , 在 BuilderSupport#createNode 方法中创建了 Xml 节点 , 在 BuilderSupport#setParent 方法中设置了 Xml 节点之间的父子关系 ;
韩曙亮
2023/03/30
4520
【Groovy】自定义 Xml 生成器 BuilderSupport ( nodeCompleted 方法获取节点闭合信息 )
SoapUI和SoapUI Pro的7个重要功能
即使没有事先熟悉,SoapUI也非常适合新用户使用。对于例如,如果我们想创建一个项目了SoapUI,只需点击文件菜单,然后单击新建项目SOAP选项,然后提供有效的WSDL文件路径。而已。同样,如果您在SoapUI工具中进行任何分配,我们可以像Microsoft套件一样轻松地完成它。
用户7466307
2020/06/16
2.4K0
SoapUI和SoapUI Pro的7个重要功能
java解析xml格式的节点属性值
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137716.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
2.2K0
soapUI使用教程[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。SoapUI使用 1. 什么是soapUI 由于 Web 服务是被程序调用的, 一般不会提供界面让最终用户或测试人员直接使用,soapUI是针对这种情况开发的一个工具,用户可以在 soapUI 中通过简单的操作完成复杂的测试。 目前我们系统中电子渠道接口、充值卡接口都是用WebService实现的,因此需要用到SoapUI进行测试。SoapUI不仅可以简单地执行测试,而且可以自动运行已经准备好的测试用例,另外它也有性能测试的功能,虽然不及Loadrunne
全栈程序员站长
2022/07/02
4.6K0
XML中节点类型
该 Node 接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。当实现 Node 接口的所有对象公开处理子节点的方法时,不是实现 Node 接口的所有对象都有子节点。例如,Text 节点可能没有子节点,且将子节点添加到这样的节点将导致引发 DOMException。
sr
2018/08/20
1.2K0
XML中节点类型
39 - 读取XML节点和属性值
在当前目录下有一个products.xml 文件,要求读取该文件中products节点的所有子节点的值以及子节点的属性值 <!-- products.xml --> <root> <products> <product uuid="1234"> <id>10000</id> <name>iphone9</name> <price>9999</price> </product> <product uuid="4321"> <id>20000</id> <name>
ruochen
2021/05/25
2.5K0
39 - 读取XML节点和属性值
SoapUI中是如何断言的呢(二)
将请求发送到Web服务器后,就会收到响应。我们需要验证响应是否包含我们期望的数据。为了验证响应,我们需要使用断言。
用户7466307
2020/06/17
1.5K0
【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )
在自定义的 Xml 生成器 MyBuilderSupport 中的 setParent 方法是设置节点之间父子关系的方法 , 在调用了 Object createNode(Object name, Map attributes, Object value) 方法返回非空值后 , 会自动回调该方法 ; ( 注意 : 一定要返回非空值 )
韩曙亮
2023/03/30
6760
CaseStudy(showcase)数据篇-从XML中获取数据
做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。 数据篇-从XML中获取数据 这个项目
用户1172164
2018/01/16
4.5K0
Java 根据XPATH批量替换XML节点中的值
根据XPATH批量替换XML节点中的值 by: 授客 测试环境 JDK 1.8.0_25 代码实操 message.xml文件 <Request service="SALE_ORDER_SERVICE" lang="zh-CN"> <Head> <AccessCode>xxxxxxxxxx12Ur8v6qkYAaOf</AccessCode> <Checkword>xxxxxxxxxxkmPif7Z35UEJjrR</Checkword> </Head>
授客
2022/09/28
2.1K0
【Groovy】自定义 Xml 生成器 BuilderSupport ( 创建 XmlNode 节点 | 管理 XmlNode 节点并将根节点转为 Xml 信息 | 完整代码示例 )
在 class MyBuilderSupport extends BuilderSupport 类中维护一个 Map 集合 , 该 Map 集合用于存储 上一篇博客 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 ) 中封装的 XmlNode 节点 ;
韩曙亮
2023/03/30
7230
Groovy-12.XML
Groovy提供了XML语言的支持,主要通过两个类(构建和解析): XML标记构建器 - Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示。通常,这些构建器用于表示XML标记,HTML标记。 Groovy的标记生成器捕获对伪方法的调用,并将它们转换为树结构的元素或节点。这些伪方法的参数被视为节点的属性。作为方法调用一部分的闭包被视为生成的树节点的嵌套子内容。 XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Nod
悠扬前奏
2019/05/30
5170
SoapUI实践:自动化测试、压力测试、持续集成
因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家,希望对需要的人有所帮助。 SoapUI 是什么? SoapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到 Eclipse,maven2.X,Netbeans 和 intellij 中使用。 SoapUI 的安装 下载地址,最好下载最新版本安装包,因为 SoapUI 是
葡萄城控件
2018/06/21
8730
SoapUI实践:自动化测试、压力测试、持续集成
因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家,希望对需要的人有所帮助。 SoapUI 是什么? SoapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到 Eclipse,maven2.X,Netbeans 和 intellij 中使用。 SoapUI 的安装 下载地址,最好下载最新版本安装包,因为 SoapUI
葡萄城控件
2018/03/27
2.5K0
SoapUI实践:自动化测试、压力测试、持续集成
获取listbox中的值
List<string> list=new List<string>();             for (int i = 0; i < lbLog.Items.Count - 1; i++)             {                 list.Add(lbLog.Items[i].ToString());             }
2018/09/03
6.2K0

相似问题

从Groovy的SoapUI响应中获取元素

10

使用groovy从soapui中具有名称空间的XML节点获取属性值

26

在soapui groovy脚本中从xml中获取文本值

10

从Groovy中的响应获取附件的SoapUI

10

使用groovy解析SoapUI中的XML响应

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文