最近从网上看到很多介绍XML的文章,输出XML文件时候,示例代码为:
...
//把XML文档输出到指定的文件 FileOutputStream outStream = new FileOutputStream(outFile); OutputStreamWriter outWriter = new OutputStreamWriter(outStream); ( ( org.apache.crimson.tree.XmlDocument) doc).write(outWriter, "GB2312"); outWriter.close(); outStream.close();
...
很遗憾,这段代码是通过不了的...会出现Class Cast Exception错误!
而作者看来并没有意识到.
经过我的研究,提出了解决的办法.采用Transformer来输出XML文件。完整代码为
public static void callWriteXmlFile(Document doc, Writer w, String encoding) { try { // Prepare the DOM document for writing Source source = new DOMSource(doc);
// Prepare the output file Result result = new StreamResult(w);
// Write the DOM document to the file Transformer xformer = TransformerFactory.newInstance() .newTransformer(); xformer.setOutputProperty(OutputKeys.ENCODING, encoding); xformer.transform(source, result);
} catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } }
经过我在winxp,jdk1.4环境下编译通过.要包含的包为:
import javax.xml.parsers.*; //XML解析器接口 import org.w3c.dom.*; //XML的DOM实现
import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;
对应的,出错的代码应该改正为:
//把XML文档输出到指定的文件 FileOutputStream outStream = new FileOutputStream(outFile); OutputStreamWriter outWriter = new OutputStreamWriter(outStream); //出现错误class cast exception // ( ( org.apache.crimson.tree.XmlDocument) doc).write(outWriter, "GB2312"); //换另外的输出xml方法 callWriteXmlFile(doc, outWriter, "GB2312"); outWriter.close(); outStream.close();
所以, 
|