0

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

SOAP XML

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

我需要从上面的 SOAP 请求中提取 <Login> 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 文件。

请帮忙。

4

1 回答 1

0

使用字符串操作来读取 XML 文档是一种经过充分测试的方法,可以解决头痛和挫败感。为此,请仅使用已发布的 XML API。

一般的方法是:

1) 假设 SOAP XML 存储在一个文件中,使用 JAXP API 将 XML 解析为一个Document对象。

2) 使用 XPath 导航到Login元素(使用标准的 Java XPath API,包含在 JDK 中)。

3) 一旦你引用了Login元素,使用 JAXPTransformerLogin元素序列化为字符串。

(如果通过使用标准 Web 服务 API 之一接收到 SOAP 数据包,则步骤 (1) 会发生变化。您提到 SOAP 数据包是以存储在文件中的形式给出的)

于 2012-09-23T10:06:52.783 回答