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

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

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

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

代码语言:javascript
运行
复制
<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
运行
复制
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
运行
复制
def slurped = new XmlSlurper().parseText(response);
def indication = slurped.diagnosticData.Signatures.StructuralValidation.Valid;

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 06:46:34

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

代码语言:javascript
运行
复制
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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档