Web服务响应中的XML格式无效

时间:2013-01-11 12:53:28

标签: xml web-services playframework

我正在使用Play 1.2.4,我需要拨打第三方网络服务。当我得到响应时,我无法通过XPath正确解析它,因为它包含无效的XML格式。

回复包含&gt;&lt;,而不是<>。我试图在没有运气的情况下解码响应。我还检查了响应内容,这似乎很好“application / soap + xml”。

那我怎么能取代这个字符。除了使用正则表达式的简单字符串替换函数之外,是否有一种优雅的替换/转换方法。

编辑:为了更好地了解我是如何调用Web服务的。

HttpResponse response = WS.url(WS_URL)
                 .setHeader("Content-Type","application/soap+xml") 
                 .body(wsBody)
                 .post();

以下是我要解析的内容:

org.w3.dom.Document xmlDoc = response.getXML();
String textOfSelectedTag = XPath.selectText("tag", xmlDoc);

并且XPath找不到标记,因为它不像<tag>格式那样&lt;tag&gt;

2 个答案:

答案 0 :(得分:2)

好的,看起来这只是一个返回字符串的SOAP方法 - 而且字符串恰好是XML。

因此,您应该将<GetFooResult>(或其他)标记的内容作为字符串获取,然后将其解析为XML文档。当您将其作为字符串获取时,它会将&lt;解码为<等,因此它将是有效的文档。 然后您将拥有一个根元素为TAG1的文档,然后您可以查询等。

我建议您使用Web服务库来进行调用 - 它应该能够抽象出所有内容,这样您就可以调用getFoo()或者其他任何内容来获取结果字符串,然后再解析它。期待。

答案 1 :(得分:1)

我猜你的XML有很好的根元素!否则xmlDoc = response.getXML();应该有错误!我认为XML中很少或很多元素都是这样的!如果我没有错,那么Web服务上的XML构建器负责生成这样的文件!这不是因为你正在阅读它的方式!

在这种情况下,我们不能做任何事情!我遇到过其他成员遇到过不正确编码的XML的情况。我所建议的所有这些情况都是为了修改产生这种XML的代码(如果你有权访问的话就是这样)或者......我们将留下的是正则表达式或字符串操作!这虽然不是首选,但只是可用的方法。

我看到的这种XML代码的一个原因是,由于字符串连接的使用!所以我的第一个建议是修改生成XML的源代码。

&lt;替换为<和将&gt;替换为>的正则表达式模式:

string result = Regex.Replace(Regex.Replace(input, @"(\&lt;)", @"<"), @"(\&gt;)", @">");