文件io之(用jdom解析xml)

文件io之(用jdom解析xml)

下面是将xml解析到txt

xml中内容如下:

<?xml version="1.0" encoding="utf-8"?>
<students>
     <student>
          <学号>201833</学号>
          <学生姓名>王二</学生姓名>
          <课程 课程名="操作系统">70</课程>
     </student>
     <student>
          <学号>201834</学号>
          <学生姓名>张三</学生姓名>
          <课程 课程名="操作系统">90</课程>
          <课程 课程名="嵌入式系统">20</课程>
     </student>
</students>

txt中内容如下:

201833,王二,操作系统,70
201834,张三,操作系统,90
201834,张三,嵌入式系统,20

package lastdaytest;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jdom2.*;
import org.jdom2.input.SAXBuilder;

public class textToxml {
	
	public static ArrayList<String> readFile(String filename){
		ArrayList<String> list = new ArrayList<String>();
		try {
			File file = new File(filename);
			SAXBuilder parser = new SAXBuilder();
			Document doc = parser.build(file);
			Element students = doc.getRootElement();
			List<Element> student =students.getChildren("student");
			for(int i=0;i<student.size();i++) {
				String stuNo = student.get(i).getChildText("学号");
				String stuName = student.get(i).getChildText("学生姓名");
				List<Element> courses = student.get(i).getChildren("课程");
				for(int j=0;j<courses.size();j++) {
					String coursename = courses.get(j).getAttributscore;
					list.add(s);
				}
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return list;
	}
	
	public static void WriteFile(ArrayList<String> list,String filename) {
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
			for(String s : list) {
				bw.write(s);
				bw.newLine();
				bw.flush();
			}
			bw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	

	public static void main(String[] args) {
          ArrayList<String> list = readFile("H:\\output.xml");
          WriteFile(list,"H:\\b.txt");
	}

}

将txt中的内容用以xml的形式解析出来
student类

package io;

import java.util.ArrayList;

public class Student {
       private String studentId;
       private String studentName;
       private ArrayList<Course> Courses;
       
       
    public Student(String studentId,String studentName,ArrayList<Course> Courses) {
    	this.studentId=studentId;
    	this.studentName = studentName;
    	this.Courses =Courses;
    }
	public String getStudentId() {
		return studentId;
	}
	public void setStudentId(String studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public ArrayList<Course> getCourses() {
		return Courses;
	}
	public void setCourses(ArrayList<Course> courses) {
		Courses = courses;
	}
}

course类

package io;

public class Course {
private String courseName;
private int score;

public Course(String courseName,int score) {
	this.courseName = courseName;
	this.score = score;
}
public String getCourseName() {
	return courseName;
}
public void setCourseName(String courseName) {
	this.courseName = courseName;
}
public int getScore() {
	return score;
}
public void setScore(int score) {
	this.score = score;
}

}

解析txt到mxl

package io;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.io.*;
import org.jdom2.*;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class txtTOxml {

	public  static ArrayList<String> readFile(String filename){
		ArrayList<String> list = new ArrayList<>();
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename))));
			String inLine=null;
			while((inLine=br.readLine())!=null) {
				list.add(inLine);
			}
			br.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
	
	
	public static void WriteFile(Map<String,Student> m,String filename) {
		Document doc = new Document();
		Element students = new Element("Students");
		doc.addContent(students);
		Element student =null;
		
		for(String s:m.keySet()) {
			if(m.containsKey(s)) {
	            student = new Element("student");
				Element sno = new Element("学号");
				sno.setText(m.get(s).getStudentId().toString());
				student.addContent(sno);
				Element sname = new Element("学生姓名");
				sname.setText(m.get(s).getStudentName().toString());
				student.addContent(sname);
				for(Course c:m.get(s).getCourses()) {
					Element course = new Element("课程");
					course.setAttribute("课程名", c.getCourseName());
					course.setText(c.getScore()+" ");
					student.addContent(course);
				}
			}
			students.addContent(student);
		}
		Format format = Format.getPrettyFormat();
		format.setEncoding("utf-8");
		format.setIndent("     ");
		XMLOutputter out = new XMLOutputter(format);
		try {
			out.output(doc,new FileOutputStream(filename));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
	
	


	public static void main(String[] args) {
		ArrayList<String> list = readFile("H:\\score.txt");
		Map<String,Student> map = new TreeMap<>(new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return o2.compareTo(o1);
			}
		});
		
		for(int i=0;i<list.size();i++) {
			String s = list.get(i);
			String info[] = s.split(",");
			if(!map.containsKey(info[0])) {
				Student student = new Student(info[0],info[1],new ArrayList<Course>());
				student.getCourses().add(new Course(info[2],Integer.parseInt(info[3])));
				map.put(info[0], student);
			}
			else {
				Student student = map.get(info[0]);
				student.getCourses().add(new Course(info[2],Integer.parseInt(info[3])));
			}
			
		}
		WriteFile(map,"H:\\output.xml");

	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值