2

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

响应有&gt;and&lt;而不是<and >。我试图解码响应没有运气。我还检查了看起来不错的响应内容 "application/soap+xml" 。

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

编辑:这里有一个更好的想法是我如何调用网络服务。

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;

4

2 回答 2

2

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

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

我建议您使用 Web 服务库进行调用 - 它应该能够抽象出所有内容,以便您可以调用getFoo()或获取结果字符串,然后按照您的预期解析它。

于 2013-01-11T15:34:57.593 回答
1

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

在这种情况下,我们无能为力!我遇到过这样的场景,其中其他成员遇到了编码不正确的 XML。对于这种情况,我所建议的只是修改生成此类 XML 的代码(如果您有权访问),否则......我们将只剩下正则表达式或字符串操作!虽然不是首选但唯一可用的方法。

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

用于替换&lt;to<&gt;to的正则表达式模式>

string result = Regex.Replace(Regex.Replace(input, @"(\&lt;)", @"<"), @"(\&gt;)", @">");
于 2013-01-11T13:27:03.073 回答