一个可视化的java程序解析XML文档(存储学生信息数据)

  • Post author:
  • Post category:java




一、XML文档解析基础概念


1、XML文档有四种解析方法:


(1)Dom文档对象解析

(2)SAX简单的XML API

(3)JDOM Java文档对象模型(常用)

(4)DOM4J扩展与JDOM(常用)

本文主要讲解最后一种解析方法:


2、Dom4j解析XML文档


dom4j是由第三方提供扩展子JDOMAPI的一组解析XML文件的java实现,它只和java有关。dom4j对XML文档实现与JDOM类似,idom将XML文档中的每个节点(node)称之为Element(元素),并提供对元素上下级的获取等实用方法。

dom4j解析XML大体分为两种操作:

(1)读取目标XML文档并解析,封装成运行时的Java对象进行处理

(2)将运行时Java对象以XML文件方式写入硬盘存储



3、Dom4j写入XML文档步骤




(1)创建DocumentFactory用来创建Document对象

(2)使用DOM4J实现对Document对象操作

(3)创建XMLWriter用来将Document对象写入XML文件

(4)关闭相关文件流


4、Dom4j读取XML文档步骤:


(1)基于xml文件路径创建File对象

(2)创建SAXReader用来加载xml文件为Document

(3)利用DOM4J相关方法解析XML文档

(4)封装文档对象数据为Java对象



二、程序实例

下面通过一个实例进行学习:


实例概要

:由XML文档存储学生数据,并对其数据进行增删改查的操作

学生类:

package com.entity;

/**
 * 学生类
 * @author NEYMAR
 *
 */
public class Student {
	
	private String code;//学号
	private String name;//姓名
	private String sex;//性别
	private String specialty;//专业
	
	/**
	 * 无参构造函数
	 */
	public Student() {
		;
	}
	
	/**
	 * 含参构造函数
	 * @param code 学号
	 * @param name 姓名
	 * @param sex 性别
	 * @param specialty 专业
	 */
	public Student(String code,String name,String sex,String specialty) {
		this.code=code;
		this.name=name;
		this.sex=sex;
		this.specialty=specialty;
	}
	
	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getSpecialty() {
		return specialty;
	}
	
	public void setSpecialty(String specialty) {
		this.specialty = specialty;
	}
}

工具类:

package com.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.entity.Student;

/**
 * 工具类
 * @author NEYMAR
 *
 */
public class Tools {
	
	/**
	 * 获取当前项目路径
	 * @return 返回该路径
	 */
	public static String getprojectPath() {
		String Path=System.getProperty("user.dir");
		return Path;
	}
	
	/**
	 * 获取类路径
	 * @return 返回该路径
	 */
	public static String getClassPath() {
		String Path=Tools.class.getClassLoader().getResource("").getPath().toString();
		return Path;
	}
	
	/**
	 * 判断学生对象是否为空
	 * @param e 学生对象
	 * @return 若为空,则返回true,若不为空,则返回false
	 */
	public static boolean isListEmpty(Student e) {
		if(e==null)
			return true;
		return false;
	}
	
	/**
	 * 判断XML文件是否存在
	 * @param Path 路径
	 * @return 若存在,则返回true,否则返回false
	 */
	public static boolean isXmlEmpty(String name) {
		String classPath=Tools.getClassPath();//获取类路径
		File file=new File(classPath+"com/Xml/"+name);
		if(file.exists())
			return true;
		return false;
	}

}

实现解析XML文档数据的类(

核心

):

package com.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.entity.Student;

/**
 * 用Dom4j方式解析XML文档
 * @author NEYMAR
 *
 */
public class Dom4jManger {

	//用DocumentFactory的静态方法创建DocumentFactory对象
	public static DocumentFactory docfactory=DocumentFactory.getInstance();
	
	/**
	 * 初始化XML文档
	 * @param fileName 文件名
	 */
	public Dom4jManger(String fileName,Student stu) {
		
		Document doc=docfactory.createDocument("utf-8");//创建document实例,并规定其编码格式为UTF-8
		Element rootEle=docfactory.createElement("Students");//创建文档根元素
		doc.setRootElement(rootEle);//设置文档
		//若STU对象不为空
		if(!Tools.isListEmpty(stu)) {
			Element stuEle=docfactory.createElement("student");//创建rooeEle下的子元素
			Element NameEle=docfactory.createElement("name");//创建stuEle下的子元素name
			NameEle.setText(stu.getName());//设置NameEle的文本值
			Element SexEle=docfactory.createElement("sex");
			SexEle.setText(stu.getSex());
			Element CodeEle=docfactory.createElement("code");
			CodeEle.setText(stu.getCode());
			Element SpecialtyEle=docfactory.createElement("specialty");
			SpecialtyEle.setText(stu.getSpecialty());
			
			/*将子元素添加到stuEle中*/
			stuEle.add(NameEle);
			stuEle.add(CodeEle);
			stuEle.add(SexEle);
			stuEle.add(SpecialtyEle);
			/*将stuEle元素添加到根元素下*/
			rootEle.add(stuEle);
		}
		String classPath=Tools.getClassPath();//获取类路径
		File xmlFile=new File(classPath+"com/Xml/"+fileName);//创建目标文件对象
		Writer writer=null;
		try {
			writer=new FileWriter(xmlFile);//创建Writer对象
			XMLWriter xmlWriter=new XMLWriter(writer,OutputFormat.createPrettyPrint());//OutputFormat.createPrettyPrint()可以使XML文件形成一种规范
			xmlWriter.write(doc);//保存为XML目标文件
			writer.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	/**
	 * 在XML文档中添加学生对象
	 * @param fileName XML文件名称
	 * @param stuList 学生的对象
	 */
	public static void AddStudent(String fileName,Student stu) {
		String classPath=Tools.getClassPath();//获取类路径
		File xmlFile=new File(classPath+"com/Xml/"+fileName);//基于文件路径创建文件对象
		Reader reader=null;
		Writer writer=null;
		try {
			reader=new FileReader(xmlFile);//基于XML文件建立文件流
			SAXReader saxReader=new SAXReader();//建立SAX文件对象流
			Document docReader=saxReader.read(reader);//读取XML文件
			if(docReader!=null) {
				Element rootEle=docReader.getRootElement();//获取根元素
				Element stuEle=docfactory.createElement("student");//创建rooeEle下的子元素
				Element NameEle=docfactory.createElement("name");//创建stuEle下的子元素name
				NameEle.setText(stu.getName());//设置NameEle的文本值
				Element SexEle=docfactory.createElement("sex");
				SexEle.setText(stu.getSex());
				Element CodeEle=docfactory.createElement("code");
				CodeEle.setText(stu.getCode());
				Element SpecialtyEle=docfactory.createElement("specialty");
				SpecialtyEle.setText(stu.getSpecialty());
				
				/*将子元素添加到stuEle中*/
				stuEle.add(NameEle);
				stuEle.add(CodeEle);
				stuEle.add(SexEle);
				stuEle.add(SpecialtyEle);
				/*将stuEle元素添加到根元素下*/
				rootEle.add(stuEle);
			}
			writer=new FileWriter(xmlFile);//创建Writer对象
			XMLWriter xmlWriter=new XMLWriter(writer,OutputFormat.createPrettyPrint());//OutputFormat.createPrettyPrint()可以使XML文件形成一种规范
			xmlWriter.write(docReader);//保存为XML目标文件
			//writer.flush();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				writer.close();
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}	
	}
	
	/**
	 * 删除学生对象
	 * @param fileName XML文件名称
	 * @param stu 学生对象
	 */
	public static void removeStudent(String fileName,String code) {
		String classPath=Tools.getClassPath();//获取类路径
		File xmlFile=new File(classPath+"com/Xml/"+fileName);//基于文件路径创建文件对象
		Reader reader=null;
		Writer writer=null;
		try {
			reader=new FileReader(xmlFile);//基于XML文件建立文件流
			SAXReader saxReader=new SAXReader();//建立SAX文件对象流
			Document docReader=saxReader.read(reader);//读取XML文件
			if(docReader!=null) {
				Element rootEle=docReader.getRootElement();//获取根元素
				List<Element> elements=rootEle.elements("student");//获取根元素下所有子元素
				for(Element e:elements) {//遍历根元素
					String codeValue=e.element("code").getText();//获取code属性值进行对比
					if(code.equals(codeValue)) {
						Element par=e.getParent();
						par.remove(e);
					}
				}
			}
			writer=new FileWriter(xmlFile);//创建Writer对象
			XMLWriter xmlWriter=new XMLWriter(writer,OutputFormat.createPrettyPrint());//OutputFormat.createPrettyPrint()可以使XML文件形成一种规范
			xmlWriter.write(docReader);//保存为XML目标文件
			//writer.flush();
			//writer.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				reader.close();
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 读取XMl文档内的学生对象信息
	 * @param fileName 文件路径
	 */
	public static List<Student> PrintStudent(String fileName) {
		List<Student> stuList=new ArrayList<Student>();
		String classPath=Tools.getClassPath();//获取类路径
		File xmlFile=new File(classPath+"com/Xml/"+fileName);//基于文件路径创建文件对象
		Reader reader=null;
		try {
			reader=new FileReader(xmlFile);//基于XML文件建立文件流
			SAXReader saxReader=new SAXReader();//建立SAX文件对象流
			Document docReader=saxReader.read(reader);//读取XML文件
			if(docReader!=null) {
				Element rootEle=docReader.getRootElement();//获取根元素
				List<Element> eleList=rootEle.elements("student");//获取所有根元素下的子元素
				for(Element e:eleList) {
					Student empObj=new Student();
					String name=e.element("name").getText();//获取元素name
					empObj.setName(name);
					
					String code=e.element("code").getText();//获取元素code
					empObj.setCode(code);
					
					String sex=e.element("sex").getText();//获取元素sex
					empObj.setSex(sex);
					
					String specialty=e.element("specialty").getText();//获取元素specialty
					empObj.setSpecialty(specialty);
					
					stuList.add(empObj);
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return stuList;
	}
	
	/**
	 * 修改学生信息
	 * @param fileName XML文档名
	 * @param stu 被修改的学生对象
	 */
	public static void changeStudent(String fileName,Student stu) {
		String classPath=Tools.getClassPath();//获取类路径
		File xmlFile=new File(classPath+"com/Xml/"+fileName);//基于文件路径创建文件对象
		Reader reader=null;
		Writer writer=null;
		try {
			reader=new FileReader(xmlFile);//基于XML文件建立文件流
			SAXReader saxReader=new SAXReader();//建立SAX文件对象流
			Document docReader=saxReader.read(reader);//读取XML文件
			if(docReader!=null) {
				Element rootEle=docReader.getRootElement();//获取根元素
				List<Element> elements=rootEle.elements("student");//获取根元素下所有子元素
				for(Element e:elements) {//遍历根元素
					String codeValue=e.element("code").getText();//获取code属性值进行对比
					if(stu.getCode().equals(codeValue)) {
						Element nameEle=e.element("name");//获取e元素下的子元素name
						nameEle.setText(stu.getName());//更改元素name的属性值
						Element sexEle=e.element("sex");//获取e元素下的子元素sex
						sexEle.setText(stu.getSex());//更改元素sex的属性值
						Element specialtyEle=e.element("specialty");//获取e元素下的子元素specialty
						specialtyEle.setText(stu.getSpecialty());//更改元素specialty的属性值
					}
				}
			}
			writer=new FileWriter(xmlFile);//创建Writer对象
			XMLWriter xmlWriter=new XMLWriter(writer,OutputFormat.createPrettyPrint());//OutputFormat.createPrettyPrint()可以使XML文件形成一种规范
			xmlWriter.write(docReader);//保存为XML目标文件
			//writer.flush();
			//writer.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				reader.close();
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

实现可视化窗口以及各项操作的类

package com.frame;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;

import com.entity.Student;
import com.util.Dom4jManger;
import com.util.Tools;


/**
 * 界面类
 * @author NEYMAR
 *
 */
public class XmlFrame extends JFrame{
	
	
	private JTabbedPane tabbedPane = new JTabbedPane();//创建一个选项卡
	private JPanel addPanel=new JPanel(new GridLayout(6,1,5,5));//添加学生数据面板
	private JPanel removePanel=new JPanel(new GridLayout(3,1,5,5));//删除学生数据面板
	private JScrollPane printPanel;//浏览学生数据面板
	private JPanel changePanel=new JPanel(new GridLayout(6,1,5,5));//修改学生数据面板
	private JPanel pathPanel=new JPanel();//增加新的XML路径面板
	
	/*添加学生数据面板组件*/
	public JPanel addjp=new JPanel();//XML文档名称
	public JPanel addjp1=new JPanel();//学生姓名
	public JPanel addjp2=new JPanel();//学生学号
	public JPanel addjp3=new JPanel();//学生性别
	public JPanel addjp4=new JPanel();//学生专业
	public JPanel addjp5=new JPanel();//按钮
	public JLabel addjl=new JLabel("文档名称:");//XML文档名称标签
	public JLabel addjl1=new JLabel("学生姓名:");//姓名标签
	public JLabel addjl2=new JLabel("学生学号:");//学号标签
	public JLabel addjl3=new JLabel("学生性别:");//性别标签
	public JLabel addjl4=new JLabel("学生专业:");//专业标签
	public JTextField addj=new JTextField();	//XML文档名称的文本框
	public JTextField addj1=new JTextField();	//学生姓名的文本框
	public JTextField addj2=new JTextField();	//学生学号的文本框
	public JTextField addj3=new JTextField();	//学生性别的文本框
	public JTextField addj4=new JTextField();	//学生专业的文本框
	public	JButton addb1=new JButton("录入");//定义一个录入按钮
	
	/*新建XML文档面板组件*/
	JPanel pathjp1=new JPanel();
	public JLabel pathjl1=new JLabel("文档名称:");
	public JTextField pathj1=new JTextField();
	public	JButton pathb1=new JButton("新建");//定义一个录入按钮
	
	/*浏览学生信息面板组件*/
	JTable table=null;
	Vector row,col;
	
	/*更改学生信息面板组件*/
	public JPanel changejp=new JPanel();//XML文档名称
	public JPanel changejp1=new JPanel();//学生姓名
	public JPanel changejp2=new JPanel();//学生学号
	public JPanel changejp3=new JPanel();//学生性别
	public JPanel changejp4=new JPanel();//学生专业
	public JPanel changejp5=new JPanel();//按钮面板
	public JLabel changejl=new JLabel("文档名称:");//XML文档名称标签
	public JLabel changejl1=new JLabel("学生姓名:");//姓名标签
	public JLabel changejl2=new JLabel("学生学号:");//学号标签
	public JLabel changejl3=new JLabel("学生性别:");//性别标签
	public JLabel changejl4=new JLabel("学生专业:");//专业标签
	public JTextField changej=new JTextField();	//XML文档名文本框
	public JTextField changej1=new JTextField();	//学生姓名的文本框
	public JTextField changej2=new JTextField();	//学生学号的文本框
	public JTextField changej3=new JTextField();	//学生性别的文本框
	public JTextField changej4=new JTextField();	//学生专业的文本框
	public	JButton changeb1=new JButton("更改");//定义一个录入按钮
	
	/*删除学生信息面板组件*/
	JPanel removejp1=new JPanel();
	JPanel removejp2=new JPanel();
	JPanel removejp3=new JPanel();
	public JLabel removejl1=new JLabel("文档名称:");//专业标签
	public JTextField removej1=new JTextField();//学生性别的文本框
	public JLabel removejl2=new JLabel("学生学号:");
	public JTextField removej2=new JTextField();	
	public	JButton removeb1=new JButton("删除");//定义一个录入按钮
	
	/**
	 * 构造函数
	 */
	public XmlFrame() {
		super("学生信息管理系统");
		setSize(600,400);//设置窗体大小
		//获取屏幕的宽度和高度,并让窗口居中显示
		double width=Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		double height=Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		setLocation((int)(width-this.getWidth())/2, (int)(height-this.getHeight())/2);
		setDefaultCloseOperation(EXIT_ON_CLOSE);//设置窗体关闭规则
		Container con=getContentPane();//获取窗口容器

		module();//初始化面板中的组件信息
		buttonAction();//初始化面板中的点击事件
	}
	
	/**
	 * 组件添加
	 */
	public void module() {
		/*标签面板*/
		tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);// 设置选项卡标签的布局方式
	    this.getContentPane().add(tabbedPane, BorderLayout.CENTER);
		
		/*添加学生数据面板信息*/
		/*文本框长度*/
		//addj.setBorder(null);//去掉文本框边线
		addj.setColumns(18);
		addj1.setColumns(18);
		addj2.setColumns(18);
		addj3.setColumns(18);
		addj4.setColumns(18);
		/*添加组件*/
		addjp.add(addjl);
		addjp.add(addj);
		addjp1.add(addjl1);
		addjp1.add(addj1);
		addjp2.add(addjl2);
		addjp2.add(addj2);
		addjp3.add(addjl3);
		addjp3.add(addj3);
		addjp4.add(addjl4);
		addjp4.add(addj4);
		addjp5.add(addb1);
		/*将学生信息面板添加到增加学生数据面板里*/
		addPanel.add(addjp);
		addPanel.add(addjp1);
		addPanel.add(addjp2);
		addPanel.add(addjp3);
		addPanel.add(addjp4);
		addPanel.add(addjp5);
	
		/*新增XML路径面板信息*/
		pathj1.setColumns(18);
		pathjp1.add(pathjl1);
		pathjp1.add(pathj1);
		pathjp1.add(pathb1);
		pathPanel.add(pathjp1);
		
		/*浏览学生信息表格*/
		col=new Vector();
		//设置列名
		col.add("学号");
		col.add("姓名");
		col.add("性别");
		col.add("专业");
		row=new Vector();
		List<Student> stulist=new ArrayList<Student>();
		stulist=Dom4jManger.PrintStudent("stu.xml");
		for(Student k:stulist) {
			Vector line=new Vector();
			line.add(k.getCode());
			line.add(k.getName());
			line.add(k.getSex());
			line.add(k.getSpecialty());
			row.add(line);
		}
		table=new JTable(row,col);
		printPanel=new JScrollPane(table);
		// 将标签组件添加到选项卡中
		tabbedPane.add("建立新的xml文档",pathPanel);
		tabbedPane.add("添加学生信息",addPanel);
		tabbedPane.add("浏览学生信息",printPanel);
		tabbedPane.add("更改学生信息",changePanel);
		tabbedPane.add("删除学生信息",removePanel);
		
		/*更改学生信息面板*/
		changej.setColumns(18);
		changej1.setColumns(18);
		changej2.setColumns(18);
		changej3.setColumns(18);
		changej4.setColumns(18);
		changejp.add(changejl);
		changejp.add(changej);
		changejp1.add(changejl1);
		changejp1.add(changej1);
		changejp2.add(changejl2);
		changejp2.add(changej2);
		changejp3.add(changejl3);
		changejp3.add(changej3);
		changejp4.add(changejl4);
		changejp4.add(changej4);
		changejp5.add(changeb1);
		changePanel.add(changejp);
		changePanel.add(changejp2);
		changePanel.add(changejp1);
		changePanel.add(changejp3);
		changePanel.add(changejp4);
		changePanel.add(changejp5);
		
		/*删除学生信息面板*/
		removej1.setColumns(18);
		removej2.setColumns(18);
		removejp1.add(removejl1);
		removejp1.add(removej1);
		removejp2.add(removejl2);
		removejp2.add(removej2);
		removejp3.add(removeb1);
		removePanel.add(removejp1);
		removePanel.add(removejp2);
		removePanel.add(removejp3);
	}
	
	/**
	 * 按钮点击事件
	 */
	public void buttonAction() {
		
		/*新建按钮点击事件*/
		pathb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String pathName=pathj1.getText()+".xml";
				if(!Tools.isXmlEmpty(pathName)) {
					Student stu=new Student("初始化","初始化","初始化","初始化");
					Dom4jManger dom=new Dom4jManger(pathName, stu);
					//创建XML文档
					JOptionPane.showMessageDialog(null, pathName+"创建成功");
				}
				else {
					JOptionPane.showMessageDialog(null, "该文档已存在");
				}
			}
		});
		
		
		/*添加按钮点击事件*/
		addb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				String pathName=addj.getText()+".xml";
				if(Tools.isXmlEmpty(pathName)) {
					String name=addj1.getText();
					String code=addj2.getText();
					String sex=addj3.getText();
					String spec=addj4.getText();
					Student stu=new Student(code,name,sex,spec);
					Dom4jManger.AddStudent(pathName, stu);
					JOptionPane.showMessageDialog(null, "学生"+name+"添加成功!");
				}
				else {
					JOptionPane.showMessageDialog(null, "该文档不存在");
				}
			}
		});
		
		/*添加按钮点击事件*/
		changeb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String pathName=changej.getText()+".xml";
				if(Tools.isXmlEmpty(pathName)) {
					String name=changej1.getText();
					String code=changej2.getText();
					String sex=changej3.getText();
					String spec=changej4.getText();
					Student stu=new Student(code,name,sex,spec);
					Dom4jManger.changeStudent(pathName, stu);;
					JOptionPane.showMessageDialog(null, "更改成功!");
				}
				else {
					JOptionPane.showMessageDialog(null, "该文档不存在");
				}
			}
		});
		
		/*删除按钮点击事件*/
		removeb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String pathName=removej1.getText()+".xml";
				if(Tools.isXmlEmpty(pathName)) {
					String code=removej2.getText();
					Dom4jManger.removeStudent(pathName, code);
					JOptionPane.showMessageDialog(null, "删除成功!");
				}
				else {
					JOptionPane.showMessageDialog(null, "该文档不存在");
				}
			}
		});
		
		/*表格双击事件*/
		table.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {//当鼠标双击时响应
				// TODO Auto-generated method stub
				int row=table.getSelectedRow();//获取行
				int column=table.getSelectedColumn();//获取列
				int r=row+1;
				int c=column+1;
				Object value=table.getValueAt(row,column);
				String info=r+"行"+c+"列";
				JOptionPane.showMessageDialog(null, info);
			}
		});
	}
	public static void main(String[] args) {
		XmlFrame xm=new XmlFrame();
		xm.setVisible(true);
	}
}

程序运行后:

在这里插入图片描述

进行新建功能测试:

在这里插入图片描述

找到工程目录查看:

在这里插入图片描述

成功创建!

用记事本打开后:

在这里插入图片描述

添加学生单位:

在这里插入图片描述

之后小编又添加了几个学生对象,查看原XML文档:

在这里插入图片描述

添加成功,之后浏览学生信息:

在这里插入图片描述

读取XML文档信息成功,之后还可以进行删除和修改学生信息的操作,有兴趣的小伙伴可以自己操作一下哦!

谢谢!



版权声明:本文为qq_42983502原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。