在 Groovy 中仅获取 soap 响应的内容

Get just content of soap response in Groovy

我有以下肥皂反应:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
     <GetHTMLResponse xmlns="http://www.webserviceX.NET">
       <GetHTMLResult>
         TEST
       </GetHTMLResult>
     </GetHTMLResponse>
   </soap:Body>
</soap:Envelope>

现在我想要一个方法来为我提供这个 xml:

<root>
  <GetHTMLResponse xmlns="http://www.webserviceX.NET">
    <GetHTMLResult>
        TEST
    </GetHTMLResult>
  </GetHTMLResponse>
</root>

Soap envelope 和 body 应该被删除,Soap Body 中的所有内容都应该在标签根下。我该怎么做?

所以你可以这样做:

import groovy.xml.*

def xml = '''<?xml version="1.0" encoding="utf-8"?>
            |<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            |   <soap:Body>
            |     <GetHTMLResponse xmlns="http://www.webserviceX.NET">
            |       <GetHTMLResult>
            |         TEST
            |       </GetHTMLResult>
            |     </GetHTMLResponse>
            |   </soap:Body>
            |</soap:Envelope>'''.stripMargin()


def result = XmlUtil.serialize(new StreamingMarkupBuilder().bind {
    root { 
        mkp.yield new XmlSlurper(false, false).parseText(xml).'soap:Body'.GetHTMLResponse
    }
})

println result

输出:

<?xml version="1.0" encoding="UTF-8"?><root>
  <GetHTMLResponse xmlns="http://www.webserviceX.NET">
    <GetHTMLResult>
         TEST
       </GetHTMLResult>
  </GetHTMLResponse>
</root>