JDOM方法读XML写入Txt

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();
		}

运行结果截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值