Java CDATA提取xml

时间:2014-05-29 20:50:26

标签: java xml cdata

出于某种原因,有人更改了我需要的webService xml响应。所以现在,我需要获取的信息是在CDATA标签内 事情是所有“<”和“>”字符已替换为“<”和“>”。

示例如何:

<MapAAAResult><!CDATA[<map>http://tstgis.xxxxxxx.xxx/gis_n/WebService1/Users/Image/xxxxxbinkor4.png|vialcap:2</map>
    <nbr>234</nbr>
    <nbrProcess>97` ....

这就是我收到它的方式:

    <MapAAAResult>
    &lt;mapa&gt;http://tstgis.xxxxxxx.xxx/gis_n/WebService1/Users/Image/xxxxxxxxbi542m4.png|vialcap:1&lt;/map&gt;
&lt;nbr&gt;234&lt;/nbr&gt;
&lt;nbrProcess&gt;97 .....

如何将信息恢复原状?更确切地说,我如何将该信息转换回xml?

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

可能与角色逃避问题有关:

HTML inside XML CDATA being converted with &lt; and &gt; brackets

像“&lt;”这样的字符,“&gt;”,“&amp;”在XML元素中是非法的,并且可以通过CDATA或字符替换来逃避这些。看起来webService在整个过程中的某个地方开启了他们的架构。

我遇到了类似的问题,我必须解析转义的xml。获取xml的快速解决方案是使用replaceAll():

String data = "<MapAAAResult>"
            + "&lt;map&gt;http://tstgis.xxxxxxx.xxx/gis_n/WebService1/Users/Image/xxxxxxxxbi542m4.png|vialcap:1&lt;/map&gt;&lt;nbr&gt;234&lt;/nbr&gt;"
            + "&lt;nbrProcess&gt;97";
data = data.replaceAll("&lt;","<");
data = data.replaceAll("&gt;", ">");
data = data.replaceAll("&amp;","&");
System.out.println(data);

你会回来的:

<MapAAAResult><map>http://tstgis.xxxxxxx.xxx/gis_n/WebService1/Users/Image/xxxxxxxxbi542m4.png|vialcap:1</map><nbr>234</nbr><nbrProcess>97...

在第一个CDATA字段中嵌入的CDATA标记会变得更复杂,并且xml解析可能会与结尾“]]&gt;”混淆“如:

<xml><![CDATA[ <tag><![CDATA[data]]></tag> ]]></xml>

因此,使用&lt; &gt; &amp;转义嵌入数据更具弹性,但可能会引入不必要的处理。另请注意:某些解析器或xml读取器可以识别转义字符。

其他一些相关主题:

XSL unescape HTML inside CDATA

When to CDATA vs. Escape & Vice Versa?