2012-10-19 63 views
1

我正在使用WebServiceTemplate类,并将从Web服务接收到的XML响应存储在文件中。但.xml文件出于某种原因包含保存为;&lt;&gt的所有<,>以Java保存.xml文件

有没有什么办法可以在保存之前将其转换为正确的.xml文件?

 InputStream inputStream = new WebServiceClientImpl().getClass().getResourceAsStream("Request.xml"); 
     StreamSource source = new StreamSource(inputStream2); 
     StreamResult result = new StreamResult(new File("Response.xml"));    
     webServiceTemplate.sendSourceAndReceiveToResult(defaultURI,source, result); 

request.xml:

<list> 
<requestXmlString xs:type="type:string" xmlns:xs="http://www.w3.org/2000/XMLSchema- instance"> 
<![CDATA[<request operationName="list" locale="en"> 
    <resourceDescriptor name="" wsType="folder" uriString="/" isNew="false"> 
    <label>null</label> 
    </resourceDescriptor>   
    </request>]]> 
     </requestXmlString> 
</list> 

Response.xml

<?xml version="1.0" encoding="UTF-8"?><listResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><listReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">&lt;?xml version="1.0" encoding="UTF-8"?&gt; 
    &lt;operationResult version="2.0.1"&gt; 
&lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt; 
&lt;resourceDescriptor name="Record1" wsType="reportUnit" uriString="/xyz" isNew="false"&gt; 
    &lt;label&gt;&lt;![RECORD 1]]&gt;&lt;/label&gt; 
    &lt;creationDate&gt;1338285680000&lt;/creationDate&gt; 
    &lt;resourceProperty name="PROP_RESOURCE_TYPE"&gt; 
     &lt;value&gt;&lt;! 
+2

你能告诉我们你的代码吗? –

+0

@Brian我已经添加了一些我的代码片段。谢谢 – user1611418

回答

0

虽然写入文件,就像<> &字符序列,使他们能够后来被读取XML解析器。

您可以尝试在文本节点上使用CDATA编码。在这种情况下,您将在CDATA块中有<。

http://en.wikipedia.org/wiki/CDATA

+0

谢谢。我已经添加了我的代码。问题是我需要解组我得到的XML响应。我正在考虑使用Castor Unmarshaller将XML绑定到我的java对象。但它似乎无法识别这些字符;&lt;文件中。我不确定它是否承认CDATA部分。我会发布我的请求和响应XML,以便您可以看看。 – user1611418

0

我想通了! :)有这样做的图书馆。所以一个简单的

StringEscapeUtils.unescapeXml(xml) 

将做的伎俩!

+0

*之前的内容*是正确的XML。问题是XML包含作为String的嵌套XML。在字符串上使用unescapeXml会将其更改为其他内容。 – artbristol