用dom4j解析有嵌套的xml文档出现中文乱码
我的xml文档有多层嵌套,编码方式为utf-8
package com.bjpowernode.xml;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.xml.sax.InputSource;
public class Dom4j {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(
new InputSource(new BufferedReader(
new InputStreamReader(new FileInputStream("conf/CCNUcanteen.xml"),"utf-8"))) );
DOMReader reader = new DOMReader();
org.dom4j.Document dom = reader.read(document);
//获取根节点
Element rootElement = dom.getRootElement();
getNodes(rootElement);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void getNodes( Element node) throws DocumentException {
// 当前节点的名称、文本内容和属性
System.out.println(node.getName());// 节点名称
System.out.println(node.getTextTrim());// 节点内容
final List listAttr = node.attributes();// 节点的所有属性
//这里是xml下body节点下面还有xml,也就是嵌套xml的。可以根据第一次遍历输出的节点属性查看
if("body".equals(node.getName())){
String bodyxml=node.getTextTrim();//把body的节点内容存储为一个xml
Document dom= DocumentHelper.parseText(bodyxml);
Element rootElement = dom.getRootElement();
getNodes(rootElement);//再次开始遍历
}
for (final Attribute attr : listAttr) {// 遍历当前节点的所有属性
final String name = attr.getName();// 属性名称
final String value = attr.getValue();// 属性的值
System.out.println(value);
}
// 递归遍历当前节点所有的子节点
final List listElement = node.elements();// 所有一级子节点的list
for (final Element e : listElement) {// 遍历所有一级子节点
getNodes(e);// 递归
}
}
}
我在网上找了一些方法,在写入xml文档时确定其编码方式,但还是会乱码
先对CCNUcanteen.xml 做转码,在解析试试。
毫无疑问编码问题。先找一个网站规范一下格式。之后再做转码。