2012-08-08 29 views
0

我已經將SOAP XML文件存儲到本地計算機中以驗證XML,我需要加載該文件並從SOAP體中提取XML以驗證它。Apache Common FileUtils將XML文件讀入字符串

SOAP XML

<SOAP:Envelope> 
    <SOAP:Body> 
     <request> 
      <Login> 
       <Username>abc</Username> 
       <Password>abc</Password> 
      </Login> 
     </request> 
    </SOAP:Body> 
</SOAP:Envelope> 

我需要從上面的SOAP請求提取<登錄> XML。 我正在使用FileUtils將文件讀入字符串。當我使用它讀取文件時,它也讀取像\ n \ t \ t等字符表示它考慮XML格式文件中的換行符和製表符。

我使用下面的代碼從XML抽取子節點作爲字符串。

InputStream requestXMLInputStream = new ByteArrayInputStream(soapRequestXML.getBytes()); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder; 
String requestXMLBody = ""; 
Document doc = null; 
try { 
    dBuilder = dbFactory.newDocumentBuilder(); 
    doc = dBuilder.parse(requestXMLInputStream);   
    NodeList requestNodeList = doc.getElementsByTagName(parentTagName); 
    Node node = requestNodeList.item(0); 
    DOMImplementationLS domImplLS = (DOMImplementationLS) doc.getImplementation(); 
    LSSerializer serializer = domImplLS.createLSSerializer(); 
    if(node != null && node.getFirstChild() != null) 
      requestXMLBody = serializer.writeToString(node.getFirstChild()); 
} catch (SAXException e) { 
    logger.error(e.getMessage()); 
} catch (IOException e) { 
    logger.error(e.getMessage()); 
}catch (ParserConfigurationException e) { 
    logger.error(e.getMessage()); 
} 

return requestXMLBody; 

如何在沒有這些字符的情況下讀取XML文件。

請幫忙。

回答

0

使用字符串處理來讀取XML文檔是一個經過充分測試的頭痛和沮喪的處方。爲此只使用發佈的XML API。

的一般方法將是:

1)假設SOAP XML被存儲在一個文件中,使用JAXP API將XML解析爲Document對象。

2)使用XPath導航到Login元素(使用包含在JDK中的標準Java XPath API)。

3)一旦參考了Login元素,請使用JAXP TransformerLogin元素串行化爲一個字符串。

(如果通過使用其中一個標準Web服務API接收到SOAP數據包,步驟(1)將會改變。您提到SOAP數據包是以文件形式存儲的)