内容有点多,心浮气躁不想读代码的基佬请立即退出。看完觉得内容对你有帮助麻烦点个赞呗~~~
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;
}