wslite SOAPResponse - 将完整XML响应的某些部分作为字符串

时间:2015-12-15 21:38:28

标签: xml string soap groovy prefix

我目前正在使用wslite库来帮助我使用SOAP Web服务。 在我的SOAPResponse中,我可以使用其text属性获取之类的

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
     <soap:Body>
          <GetPriceResponse xmlns:"http://www.w3schools.com/prices">
              <Price>1.90</Price>
          </GetPriceResponse>
     </soap:Body>
</soap:Envelope>

顺便说一下,我从here拿了这个样本。

我的问题是我真的只想把主要内容作为String。在这种情况下,它应该是:

<GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
     <Price>1.90</m:Price>
</GetPriceResponse>

我尝试过做之类的事情

SOAPClient client = new SOAPClient(service)
def response = client.send(SOAPAction: action) {
     Method(xmlns: namespace)
}
println XmlUtil.serialize(response.body.'*' as GPathResult)

但不知何故,我设法得到像这样的

<tag0:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
     <tag0:Price>1.90</tag0:Price>
</tag0:GetPriceResponse>

它与XmlUtil的命名空间感知有某种关系。但我不认为serialize方法提供了一个重载,我可以将其设置为关闭。还有另一种方法吗?我真的需要身体内容String。我愿意接受其他方法的使用。但是现在,我不确定该怎么做。使用StreamingMarkupBuilder也是如此。我在每个标签中都有tag0个前缀。

1 个答案:

答案 0 :(得分:1)

最后,我使用了StreamingMarkUpBuilder,我必须在绑定闭包中包含mkp.declareNamespace ('prefix', 'namespace')。在我的例子中,为了防止它生成自己的名称空间前缀(如tag0)),我这样做了:

String xml = new StreamingMarkupBuilder().bind { 
     mkp.declareNamespace('': 'http://www.w3schools.com/prices') 
     ...
}