问题描述
用DOM解析xml,以下是Java代码eHashAlg.getFirstChild().getNodeValue()和eHashAlg.getFirstChild().setNodeValue(hashAlg)都起作用了,就是写回文件的时候,写回去的是空的。不知道哪里有问题?DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();try{DocumentBuilderdb=dbf.newDocumentBuilder();Filefile=newFile("D:\verify.xml");Documentdoc=db.parse(file);NodeListnl=doc.getElementsByTagName("data_process");ElementeVCfg=(Element)nl.item(0);NodeeHashAlg=eVCfg.getElementsByTagName("hash_alg").item(0);System.out.println(eHashAlg.getFirstChild().getNodeValue());eHashAlg.getFirstChild().setNodeValue(hashAlg);System.out.println(eHashAlg.getFirstChild().getNodeValue());DOMSourcesource=newDOMSource(doc);StreamResultresult=newStreamResult(newFile("D:\verify.xml.bak"));System.out.println(result.getOutputStream());TransformerFactorytff=TransformerFactory.newInstance();Transformertf=tff.newTransformer();Propertiesproperties=tf.getOutputProperties();properties.setProperty(OutputKeys.ENCODING,"GB2312");tf.setOutputProperties(properties);tf.transform(source,result);}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(TransformerConfigurationExceptione){e.printStackTrace();}catch(TransformerExceptione){e.printStackTrace();}
解决方案
解决方案二:
StreamResultresult=newStreamResult(newFile("D:\verify.xml.bak"));System.out.println(result.getOutputStream());
这里你定义了一个输出,而这个输出没有任何内容,当然打印为空了具体的输出操作是在tf.transform(source,result);
这里完成的这里所做的就是把source内容输出到result中。
解决方案三:
引用1楼stl0的回复:
JavacodeStreamResultresult=newStreamResult(newFile("D:\verify.xml.bak"));System.out.println(result.getOutputStream());这里你定义了一个输出,而这个输出没有任何内容,当然打印为空了具体的输出操作是在Javacodetf.tran……
为什么输出没有内容呢?输出操作tf.transform(source,result)的source就是啊?
解决方案四:
引用2楼ytmfdx的回复:
为什么输出没有内容呢?输出操作tf.transform(source,result)的source就是啊?
我用不同的xml测试了下,输出的文件有内容啊
解决方案五:
引用3楼stl0的回复:
引用2楼ytmfdx的回复:为什么输出没有内容呢?输出操作tf.transform(source,result)的source就是啊?我用不同的xml测试了下,输出的文件有内容啊
那是环境问题了?你用java版本是多少的?
解决方案六:
引用4楼ytmfdx的回复:
那是环境问题了?你用java版本是多少的?
JRE6