在生成xml文件指定生成的目的地和文件的输出方式时,如果使用的是Writer,那么在生成的xml中含有中文的时候会出现中文乱码,此时就只能使用OutputStream了,因为Writer遇到中文的时候不知道该如何解析。
如:XMLWriter writer = new XMLWriter(new FileOutputStream(dest), format);
/**
* 创建xml文件
* @param dest
* @throws IOException
*/
public static void createXml(String dest) throws IOException {
//新建一个document
Document document = DocumentHelper.createDocument();
//设置输出字符集
document.setXMLEncoding("UTF-8");
//新建一个位于document下的元素persons
Element personsEle = document.addElement("persons");
for (int i=1;i<6;i++) {
//新建一个位于persons下的元素person
Element person = personsEle.addElement("person");
//添加属性
person.addAttribute("id", String.valueOf(i));
person.addAttribute("sex", new String("女".getBytes()));
Element name = person.addElement("name");
name.setText("person"+i);
}
//美化输出格式
OutputFormat format = OutputFormat.createPrettyPrint();
//新建一个XMLWriter,同时指定输出位置和格式
XMLWriter writer = new XMLWriter(new FileOutputStream(dest), format);
//把新建好的document写到指定输出位置
writer.write(document);
writer.close();
}
/**
* 读取并解析xml文件
* @param fileName
* @throws DocumentException
*/
public static void readXml(String fileName) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(Util.class.getClassLoader().getResourceAsStream(fileName));
Element root = document.getRootElement();
iteratorEle(root);
}
/**
* 通过父节点来遍历其下的所有子节点,并取出它们的文本值和属性值
* @param root
*/
public static void iteratorEle(Element root) {
String rootName = root.getName();
Iterator iter = root.elementIterator();
while (iter.hasNext()) {
Element ele = (Element) iter.next();
String eleName = ele.getName();
System.out.println("元素"+rootName+"有子节点"+eleName);
Iterator attrIter = ele.attributeIterator();
while (attrIter.hasNext()) {
Attribute attr = (Attribute)attrIter.next();
String attrName = attr.getName();
String attrValue = (String)attr.getData();
System.out.println("元素"+rootName+"的子元素"+eleName+"的属性"+attrName+"的值是:"+attrValue);
}
if (ele.isTextOnly()) {
String content = ele.getText();
System.out.println("元素"+rootName+"的子元素"+eleName+"的值是:"+content);
}
iteratorEle(ele);
}
}