我从Web服务获取SOAP消息,并且可以使用以下代码将响应字符串转换为XML文件。这很好用。但我的要求是不将SOAP消息写入文件。我只需要将这个XML文档对象保存在内存中,并提取一些要在进一步处理中使用的元素。但是,如果我只是尝试访问下面的文档对象,它就会变为空。
有人可以告诉我如何将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 );
}
答案 0 :(得分:0)
删除最后5行代码,你将只在内存中包含DOM文档。将此文档存储在某个字段中,而不是存储在本地变量中。
如果这还不够,那么请用代码说明你对的意思“如果我只是尝试访问下面的文档对象,它就会变为空”。
答案 1 :(得分:0)
JB Nizet是对的,第一步是从xmlString
创建一个DOM。这会将您的xmlString(或SOAP消息)加载到内存中的Document中。以下步骤正在做什么(与Transform相关的所有事情)是将DOM序列化为文件(xmlFileName.xml),这不是你想要做的,对吧?
当你说你的DOM是空的时,我认为你试图用document.toString()
打印出DOM的内容,并返回类似“[document:null]”的内容。这并不意味着您的DOM是空的。实际上你的DOM包含数据。您现在需要使用DOM API来访问文档中的节点。尝试类似document.getChildNodes(), document.getElementsByTagName(), etc