我目前正在使用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
个前缀。
答案 0 :(得分:1)
最后,我使用了StreamingMarkUpBuilder
,我必须在绑定闭包中包含mkp.declareNamespace ('prefix', 'namespace')
。在我的例子中,为了防止它生成自己的名称空间前缀(如tag0)
),我这样做了:
String xml = new StreamingMarkupBuilder().bind {
mkp.declareNamespace('': 'http://www.w3schools.com/prices')
...
}