2012-10-19 104 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