import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
* DOM4J XML乱码问题
* 根据xml编码的不通生成响应的的格式,防止产生乱码
*
* @author liaowei
* @version [版本号, Dec 30, 2009]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class XMLLuanMa
{
/** 生成的xml文件
* 根据字符编码生成相应的xml文件到制定的目录下
* @param path 文件路径
* @param character 字符编码
* @see [类、类#方法、类#成员]
*/
public static void createXml(String path, String character)
{
//如果上面设置的xml编码类型为utf-8,则应当用FileOutputStream来构建xml文件,否则还是会出现乱码问题
File file = new File(path);
XMLWriter xmlWriter = null;
Document doc = DocumentHelper.createDocument();
//xml文件字符编码格式化
OutputFormat characterFormat = OutputFormat.createPrettyPrint();
//设置XML文件的编码格式,如果有中文可设置为GBK或UTF-8
characterFormat.setEncoding(character);
Element root = doc.addElement("chinaSoft");
Element area = root.addElement("area");
area.addAttribute("id", "111");
Element element = area.addElement("areaName");
element.setText("济南");
element = area.addElement("areaCode");
element.setText("0531");
element = area.addElement("manager");
element.setText("安总");
element = area.addElement("managerAge");
element.setText("28");
if("gbk".equalsIgnoreCase(character))
{
try {
xmlWriter = new XMLWriter(new FileWriter(file), characterFormat);
} catch (IOException e1) {
e1.printStackTrace();
}
}
else
{
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
xmlWriter = new XMLWriter(fos, characterFormat);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
try {
//生成响应的xml文件输出
xmlWriter.write(doc);
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
//测试生成的xml文件
XMLLuanMa.createXml("C:\\liaowei.xml","GBK");
}
}
1、XML常见的解析方式有(多选) 答案 ABD
A、DOM4J B、SAX C、W3C D、STAX
2、对于解析内容特大的xml文件效率最高的那种 (单选) 答案 A
A、DOM4J B、SAX C、STAX
3、对于XML文件生成,如果含有汉字,而我们要求的编码是UTF-8,我们选择那种方式可以避免汉字乱码问题(单选) 答案B
A、XMLWriter xmlWriter = new XMLWriter(new FileWriter(new File("c:\\test.xml")), characterFormat)
B、FileOutputStream fos = new FileOutputStream(file);
XMLWriter xmlWriter = new XMLWriter(fos, characterFormat);
C、XMLWriter xmlWriter = new XMLWriter(fos);