Apache Common FileUtils将XML文件读入String

时间:2012-08-08 07:56:52

标签: xml-parsing apache-commons fileutils

我已经将SOAP XML文件存储到本地机器中,以验证我需要加载该文件并从SOAP主体中提取XML以验证它。

SOAP XML

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

我需要提取&lt; Login&gt;来自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文件。

请帮忙。

1 个答案:

答案 0 :(得分: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数据包是以存储在文件中的形式提供的)