【问题标题】:Groovy to get node values from XML in SoapUI responseGroovy 在 SoapUI 响应中从 XML 获取节点值
【发布时间】:2019-08-08 10:26:23
【问题描述】:

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

<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,如下图:

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) 错误在第 13 行

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

def slurped = new XmlSlurper().parseText(response);
def indication = slurped.diagnosticData.Signatures.StructuralValidation.Valid;

我也尝试过不同的形式:

def code = new XmlSlurper().parseText(xml)
                           .Body
                           .validateSignatureResponse
                           .WSReportsDTO
                           .diagnosticData
                           .Signatures
                           .Signature
                           .StructuralValidation
                           .Valid
                           .text()

【问题讨论】:

    标签: xml groovy soapui xmlslurper


    【解决方案1】:

    您可以使用 GPath(Groovy 的 XPath 等价物)直接进入您的元素,而不是向下导航:

    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 Goodness: Navigating with GPath 以获得温和的介绍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 2014-09-22
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多