这里转贴一个使用java在处理xml时遇到中文问题的解决方法 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 这里转贴一个使用java在处理xml时遇到中文问题的解决方法 (http://www.webasp.net/article/7/6968.htm) |
| -- 作者:未知 -- 发布日期: 2003-07-26 |
| ------------ author:wait4friend ------------ 共有三种方法,分别使用了JDK, xerces.jar或jdom.jar。 直接贴出原码: /** * Use this program to indicate how to save a XML file, resolving the problem * about CharacterSet, I mean GB2312 here can be dealt with correctly * * @author Michael Zeng */ package classes; import java.io.*; public class DOMTest { private String inFile = "E:/About XML/Java_XML/XmlData/mapping.xml"; private String outFile = "E:/About XML/Java_XML/XmlData/my.xml"; public static void main(String args[]) { new DOMTest(); } //Approach 1: only use the JDK 1.4 //In this case, I handle the Chinese correctly with the TransFormer.setOutputProperty() //These packages are necessary: // org.w3c.dom // javax.xml.parsers // javax.xml.transform // javax.xml.transform.dom // javax.xml.transform.stream public DOMTest() { try { //code to create a new DOM document goes here... javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.dom.Document doc = builder.newDocument(); //Add some elements here... org.w3c.dom.Element root = doc.createElement("老师"); org.w3c.dom.Element wang = doc.createElement("王"); wang.appendChild(doc.createTextNode("我是王老师")); root.appendChild(wang); doc.appendChild(root); //code to save goes here... javax.xml.transform.Transformer transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer(); //Notice this first sentence below, which resolves the problem of Chinese transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312"); transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes"); transformer.transform(new javax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(outFile)); } catch (Exception e) { System.out.println (e.getMessage()); } } //Approach 2: use Xerces additionally. The xerces.jar must have been in // your CLASSPATH //In this case, Chinese characters can be handled successfully. //These packages are necessary: // org.w3c.dom // org.apache.xerces.parsers // org.apache.xml.serialize //// public DOMTest() //// { //// try //// { //// //code to parse an existed XML file goes here... //// org.apache.xerces.parsers.DOMParser parser = //// new org.apache.xerces.parsers.DOMParser(); //// parser.parse(inFile); //// org.w3c.dom.Document.doc = parser.getDocument(); //// //// //code to save goes here... //// FileWriter writer = new FileWriter(outFile); //// //Pay attention to the OutputFormat constructor, which set the GB2312 //// org.apache.xml.serialize.OutputFormat outputFormat = //// new org.apache.xml.serialize.OutputFormat(doc, "GB2312", true); //// //// org.apache.xml.serialize.XMLSerializer serializer = //// new org.apache.xml.serialize.XMLSerializer(writer, outputFormat); //// serializer.serialize(doc); //// writer.close(); //// } //// catch (Exception e) //// { //// System.out.println (e.getMessage()); //// } //// } //Approach 3: use the JDOM package, and this is the simplest one. Additionally, // the jdom.jar must have been in your CLASSPATH //These package are necessary: // org.jdom // org.jdom.input // org.jdom.output //// public DOMTest() //// { //// try //// { //// //code to parse an existed XML file goes here... //// org.jdom.input.SAXBuilder builder = new org.jdom.input.SAXBuilder(); //// org.jdom.Document doc = builder.build(inFile); //// //// //code to save goes here... //// FileWriter writer = new FileWriter(outFile); //// //// org.jdom.output.XMLOutputter outputter = //// new org.jdom.output.XMLOutputter(" ", true, "GB2312"); //// outputter.output(doc, writer); //// writer.close(); //// } //// catch (Exception e) //// { //// System.out.println (e.getMessage()); //// } //// } } |
| webasp.net |