用dom4j解析有嵌套的xml文档出现中文乱码

问题遇到的现象和发生背景

用dom4j解析有嵌套的xml文档出现中文乱码

遇到的现象和发生背景,请写出第一个错误信息

我的xml文档有多层嵌套,编码方式为utf-8

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
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);// 递归  
            }  
        }

}

运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

我在网上找了一些方法,在写入xml文档时确定其编码方式,但还是会乱码

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

img

先对CCNUcanteen.xml 做转码,在解析试试。

毫无疑问编码问题。先找一个网站规范一下格式。之后再做转码。