XML文件中内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student>
<ID>2020001</ID>
<name>Palmy</name>
<subjects>
<subject name="操作系统">100</subject>
<subject name="组成原理">100</subject>
</subjects>
</student>
<student>
<ID>2020002</ID>
<name>Billy</name>
<subjects>
<subject name="操作系统">90</subject>
<subject name="组成原理">30</subject>
<subject name="数据结构">100</subject>
</subjects>
</student>
<student>
<ID>2020003</ID>
<name>Faye</name>
<subjects>
<subject name="数据结构">40</subject>
</subjects>
</student>
</students>
写入txt中格式为:
2020001,Palmy,操作系统,100;
2020001,Palmy,组成原理,100;
一层层拆开就好啦
Main.java
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class Main {
public static void main(String []args){
try{
//创建一个JDOM解析器,解析dom元素
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("input.xml"));
//根元素students
Element root = document.getRootElement();
//获取所有学生标签student
List<Element> studentz = root.getChildren();
//创建输出文档
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("output.txt"))));
for(int i=0;i<studentz.size();i++){
Element student = studentz.get(i);
//ID和姓名的基本信息
String basicInfo = student.getChildText("ID")+","
+student.getChildText("name");
//获取所有科目标签
List<Element> subjects = student.getChild("subjects").getChildren();
//依次获取每个科目的信息
for(int j=0;j<subjects.size();j++){
//第j个科目
Element subject = subjects.get(j);
//课程名和分数的信息
String NmSc = "," + subject.getAttributeValue("name")
+","+subject.getText()+";";
//输出到txt文件中
bw.write(basicInfo+NmSc);
bw.newLine();
}
}
bw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果截图:
如果学号排个序…
try{
//创建一个JDOM解析器,解析dom元素
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("input.xml"));
//根元素students
Element root = document.getRootElement();
//获取所有学生标签student
List<Element> studentz = root.getChildren();
//如果要排个序就先存在arraylist里吧
ArrayList<String> result = new ArrayList<>();
for(int i=0;i<studentz.size();i++){
Element student = studentz.get(i);
//ID和姓名的基本信息
String basicInfo = student.getChildText("ID")+","
+student.getChildText("name");
//获取所有科目标签
List<Element> subjects = student.getChild("subjects").getChildren();
//依次获取每个科目的信息
for(int j=0;j<subjects.size();j++){
//第j个科目
Element subject = subjects.get(j);
//课程名和分数的信息
String NmSc = "," + subject.getAttributeValue("name")
+","+subject.getText()+";";
result.add(basicInfo+NmSc);
}
}
//降序
Collections.sort(result,Collections.reverseOrder());
//升序
//Collections.sort(result);
//创建输出文档
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("output.txt"))));
//逐行输出
for(String ss:result){
bw.write(ss);
bw.newLine();
}
bw.close();
}catch(Exception e){
e.printStackTrace();
}
运行结果截图: