1

我从 Web 服务获取 SOAP 消息,并且可以使用以下代码将响应字符串转换为 XML 文件。这工作正常。但我的要求是不要将 SOAP 消息写入文件。我只需要将这个 XML 文档对象保存在内存中,并提取一些元素以用于进一步处理。但是,如果我只是尝试访问下面的文档对象,它是空的。

有人可以告诉我如何将 a 转换为String内存中的 XML 对象(无需写入文件)?

String xmlString = new String(data); 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

DocumentBuilder builder;  
try  
{  
    builder = factory.newDocumentBuilder();  

    // Use String reader  
    Document document = builder.parse( new InputSource(  
            new StringReader( xmlString ) ) );  

    TransformerFactory tranFactory = TransformerFactory.newInstance();  
    Transformer aTransformer = tranFactory.newTransformer();  
    Source src = new DOMSource( document );  

    Result dest = new StreamResult( new File( "xmlFileName.xml" ) );  
    aTransformer.transform( src, dest );

}
4

2 回答 2

0

删除最后 5 行代码,您将只在内存中拥有 DOM 文档。将此文档存储在某个字段中,而不是存储在局部变量中。

如果这还不够,请用代码解释“如果我只是尝试访问下面的文档对象,它是空的”是什么意思。

于 2012-10-02T21:35:00.133 回答
0

JB Nizet 是对的,第一步是从xmlString. 这会将您的 xmlString(或 SOAP 消息)加载到内存中的文档中。以下步骤正在做什么(与 Transform 相关的所有事情)是将 DOM 序列化为文件(xmlFileName.xml),这不是您想要做的,对吧?

当您说您的 DOM 为空时,我认为您尝试使用 打印出 DOM 的内容document.toString(),并返回类似“[document: null]”的内容。这并不意味着你的 DOM 是空的。实际上,您的 DOM 包含数据。您现在需要使用 DOM API 来访问文档中的节点。尝试类似的东西document.getChildNodes(), document.getElementsByTagName(), etc

于 2012-10-02T21:57:53.363 回答