在生成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); } }