JAVA使用dom4j解析XML文件

内容有点多,心浮气躁不想读代码的基佬请立即退出。看完觉得内容对你有帮助麻烦点个赞呗~~~

1.项目引入依赖

  		<dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

2.XML模板

<?xml version="1.0" encoding="UTF-8"?>
<subjectResultTables>
    <table tableName="tb_exa_results_february" tableDesc="2月-考试成绩结果表">
        <subject name="english" desc="英语科目">
            <result userid="A01" score="77"/>
            <result userid="A02" score="88"/>
        </subject>
        <subject name="maths" desc="数学科目">
            <result userid="A01" score="134"/>
            <result userid="A02" score="104"/>
        </subject>
    </table>
    <table tableName="tb_exa_results_june" tableDesc="6月-考试成绩结果表">
        <subject name="english" desc="英语科目">
            <result userid="D01" score="77"/>
            <result userid="D02" score="88"/>
        </subject>
        <subject name="maths" desc="数学科目">
            <result userid="E01" score="134"/>
            <result userid="E02" score="104"/>
        </subject>
    </table>
</subjectResultTables>

3.关键性代码(为方便对比xml分析代码,对象实体在最后)


    public static void loadMetaStandardMapConfig() {
    
    
        try {
    
    
            //获取配置文件路径
            String path = System.getProperty("user.dir") + File.separator + "conf" + File.separator + "subjectResult.xml";

            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new FileInputStream(new File(path)));
            List<SubjectResultTable> subjectResultTables=new ArrayList<>();
            if (document != null) {
    
    
                //获取根节点 [subjectResultTables]
                Element rootElement = document.getRootElement();

                //获取根节点下的所有子节点 List[table]
                List<Element> tableSubElementList = rootElement.elements();
                for (Element tableElement : tableSubElementList) {
    
    

                    SubjectResultTable subjectResultTable = new SubjectResultTable();
                    //获取数据表名,数据表描述名
                    subjectResultTable.setTableName(tableElement.attributeValue("tableName"));
                    subjectResultTable.setTableDesc(tableElement.attributeValue("tableDesc"));

                    List<SubjectInfo> subjectInfos=new ArrayList<>();
                    //初始化科目信息
                    subjectResultTable.setSubjectInfos(subjectInfos); ;

                    //获取Table下的所有子节点 List[subject]
                    List<Element> subjectElements = tableElement.elements();
                    for (Element subjectElement : subjectElements) {
    
    
                        //初始化科目信息对象
                        SubjectInfo subjectInfo=new SubjectInfo();
                        subjectInfo.setName(subjectElement.attributeValue("name"));
                        subjectInfo.setDesc(subjectElement.attributeValue("desc"));

                        List<SubjectResult> subjectResults=new ArrayList<>();
                        subjectInfo.setSubjectResults(subjectResults);

                        //获取subject下的所有子节点 List[result]
                        List<Element> resultElements  = subjectElement.elements();
                        for (Element resultElement : resultElements) {
    
    

                            SubjectResult subjectResult = new SubjectResult();
                            subjectResult.setUserid(resultElement.attributeValue("userid"));
                            subjectResult.setScore(resultElement.attributeValue("score"));

                            subjectResults.add(subjectResult);
                        }
                        subjectInfos.add(subjectInfo);
                    }
                    subjectResultTables.add(subjectResultTable);
                }

                System.out.printf(JSON.toJSONString(subjectResultTables));
            }
        } catch (DocumentException | FileNotFoundException e) {
    
    
            System.out.println(String.format("加载文件[conf/subjectResult.xml]异常!" + e.getMessage()));
        }
    }

4. 执行结果1

在这里插入图片描述

4.2 执行结果2(json格式)

[
    {
    
    
        "subjectInfos": [
            {
    
    
                "desc": "英语科目",
                "name": "english",
                "subjectResults": [
                    {
    
    
                        "score": "77",
                        "userid": "A01"
                    },
                    {
    
    
                        "score": "88",
                        "userid": "A02"
                    }
                ]
            },
            {
    
    
                "desc": "数学科目",
                "name": "maths",
                "subjectResults": [
                    {
    
    
                        "score": "134",
                        "userid": "A01"
                    },
                    {
    
    
                        "score": "104",
                        "userid": "A02"
                    }
                ]
            }
        ],
        "tableDesc": "2月-考试成绩结果表",
        "tableName": "tb_exa_results_february"
    },
    {
    
    
        "subjectInfos": [
            {
    
    
                "desc": "英语科目",
                "name": "english",
                "subjectResults": [
                    {
    
    
                        "score": "77",
                        "userid": "D01"
                    },
                    {
    
    
                        "score": "88",
                        "userid": "D02"
                    }
                ]
            },
            {
    
    
                "desc": "数学科目",
                "name": "maths",
                "subjectResults": [
                    {
    
    
                        "score": "134",
                        "userid": "E01"
                    },
                    {
    
    
                        "score": "104",
                        "userid": "E02"
                    }
                ]
            }
        ],
        "tableDesc": "6月-考试成绩结果表",
        "tableName": "tb_exa_results_june"
    }
]

5.创建实体类

5.1. 成绩总表

/**
 * 成绩表
 */
@Data
public class SubjectResultTable {
    
    

     //成绩结果表名
     String tableName;
     
     //表名描述
     String tableDesc;

     //报文协议标准表字段属性
     List<SubjectInfo> subjectInfos;

}

5.2. 科目信息表

/**
 * 科目信息
 */
@Data
public class SubjectInfo {
    
    

     //科目名称
     String name;
     
     //科目描述
     String desc;

     //科目成绩结果
     List<SubjectResult> subjectResults=new ArrayList<>();

}

5.3 学生成绩结果表

/**
 * 科目成绩结果
 */
@Data
public class SubjectResult {
    
    

     //学号
     String userid;
     
     //成绩
     String score;
}

猜你喜欢

转载自blog.csdn.net/qq_37959253/article/details/130242275