DOM4J 解析XML文件
来源:互联网 发布:网络对传统文化的影响 编辑:程序博客网 时间:2024/06/14 00:17
这几天复习java知识就顺便弄了一个这么一个小的Demo案例跟大家分享一下。 如果按照这个目录一点点的搭建起来 。代码下边都有 基本是可以正常运行的 。如果有问题的话 大家可以加微信(QQ) 354032267 一起交流、、共同进步。。
目录结构
我就直接把每部分的代码贴出来吧。
- IStudentDao.java
package dao;import java.util.List;import entity.Student;public interface IStudentDao { public List<Student> findAll(); public boolean addStudent(Student student); public boolean deleteStudent(String sno);}
- StudentDaoImpl.java
package dao.impl;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.DOMException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import dao.IStudentDao;import entity.Student;public class StudentDaoImpl implements IStudentDao { @Override public List<Student> findAll() { List<Student> all = new ArrayList<Student>();; try { //创建解析器工厂对象 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //创建解析器对象 DocumentBuilder db=factory.newDocumentBuilder(); //获取文档对象 Document doc=db.parse(new File("db\\student.xml")); //获取根节点 Element rootEle=doc.getDocumentElement(); NodeList nodeList=rootEle.getElementsByTagName("student"); for (int i = 0; i < nodeList.getLength(); i++) { Student student=new Student(); Node studentNode=nodeList.item(i); //为了获取标签中的属性,所以要将Node向下转型 Element studentEle=(Element) studentNode; //可以根据属性名称获取属性的值 String sno=studentEle.getAttribute("sno"); student.setSno(sno); //获取Student节点下的所有子节点 NodeList studentChild=studentNode.getChildNodes(); for (int j = 0; j < studentChild.getLength(); j++) { Node studentChildNode=studentChild.item(j); if(studentChildNode.getNodeName().equals("sname")){ student.setSname(studentChildNode.getTextContent()); } if(studentChildNode.getNodeName().equals("sex")){ student.setSex(studentChildNode.getTextContent()); } if(studentChildNode.getNodeName().equals("age")){ student.setAge(Integer.parseInt(studentChildNode.getTextContent())); } } all.add(student); } } catch (DOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return all; } @Override public boolean addStudent(Student student) { boolean flag=false; try { //创建解析器工厂对象 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //创建解析器对象 DocumentBuilder db=factory.newDocumentBuilder(); //获取文档对象 Document doc=db.parse(new File("db\\student.xml")); //获取根节点 Element rootEle=doc.getDocumentElement(); //创建名称为student的节点 Element studentEle=doc.createElement("student"); Element snameEle=doc.createElement("sname"); Element sexEle=doc.createElement("sex"); Element ageEle=doc.createElement("age"); //为student节点设置属性 studentEle.setAttribute("sno",student.getSno()); //给节点添加元素内容 snameEle.setTextContent(student.getSname()); sexEle.setTextContent(student.getSex()); ageEle.setTextContent(String.valueOf(student.getAge())); //设置关系 studentEle.appendChild(snameEle); studentEle.appendChild(sexEle); studentEle.appendChild(ageEle); //设置student为根节点students的子节点 rootEle.appendChild(studentEle); //将DOM模型转成XML文件 TransformerFactory tranFactory=TransformerFactory.newInstance(); Transformer tran=tranFactory.newTransformer(); Source xmlSource=new DOMSource(doc); OutputStream outputStream=new FileOutputStream(new File("db\\student.xml")); Result outputTarget=new StreamResult(outputStream); tran.transform(xmlSource, outputTarget); flag=true; } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (TransformerConfigurationException e) { e.printStackTrace(); }catch (TransformerException e) { e.printStackTrace(); } return flag; } @Override public boolean deleteStudent(String sno) { boolean flag=false; try { //创建解析器工厂对象 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //创建解析器对象 DocumentBuilder db=factory.newDocumentBuilder(); //获取文档对象 Document doc=db.parse(new File("db\\student.xml")); //获取根节点 Element rootEle=doc.getDocumentElement(); NodeList nodeList=rootEle.getElementsByTagName("student"); for (int i = 0; i < nodeList.getLength(); i++) { Node node=nodeList.item(i); Element ele=(Element) node; String no=ele.getAttribute("sno"); if(no.equals(sno)){ rootEle.removeChild(node); break; } } //将DOM模型转成XML文件 TransformerFactory tranFactory=TransformerFactory.newInstance(); Transformer tran=tranFactory.newTransformer(); Source xmlSource=new DOMSource(doc); OutputStream outputStream=new FileOutputStream(new File("db\\student.xml")); Result outputTarget=new StreamResult(outputStream); tran.transform(xmlSource, outputTarget); flag=true; } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (TransformerConfigurationException e) { e.printStackTrace(); }catch (TransformerException e) { e.printStackTrace(); } return flag; }}
3.实体类 Student.java
package entity;public class Student { private String sno; private String sname; private String sex; private int age; public Student() { super(); } public Student(String sno, String sname, String sex, int age) { super(); this.sno = sno; this.sname = sname; this.sex = sex; this.age = age; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return sno+"\t"+sname+"\t"+sex+"\t"+age; }}
- 运行 :Menu.java
package menu;import java.util.List;import java.util.Scanner;import org.apache.log4j.Logger;import dao.IStudentDao;import dao.impl.StudentDaoImpl;import entity.Student;public class Menu { private static Logger logger=Logger.getLogger(Menu.class); public static void main(String[] args) { Scanner input=new Scanner(System.in); IStudentDao sm=new StudentDaoImpl(); while(true){ System.out.println("*********学生管理系统**********"); System.out.println("1、增加学生"); System.out.println("2、学生列表"); System.out.println("3、删除学生"); System.out.println("****************************"); System.out.println("请选择:"); int choice=input.nextInt(); switch (choice) { case 1: System.out.println("学生管理系统>增加学生"); System.out.println("请输入学生编号:"); String sno=input.next(); System.out.println("请输入学生姓名:"); String name=input.next(); System.out.println("请输入学生的性别:"); String sex=input.next(); System.out.println("请输入学生年龄:"); int age=input.nextInt(); //实例化和初始化 Student s=new Student(sno, name, sex, age); boolean isAdd=false; try { isAdd = sm.addStudent(s); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); logger.error(e.getMessage()); } if(isAdd){ System.out.println("增加成功!"); }else{ System.out.println("增加失败!"); } break; case 2: System.out.println("学生管理系统>学生列表"); List<Student> all=sm.findAll(); if(!all.isEmpty()){ System.out.println("学号\t姓名\t性别\t年龄"); for (int i = 0; i < all.size(); i++) { Student student=(Student) all.get(i); System.out.println(student); } }else{ System.out.println("======sorry,暂无数据!= ========"); } break; case 3: System.out.println("学生管理系统>删除学生"); System.out.println("请输入要删除的学生编号:"); String sno1=input.next(); boolean isDel=false; try { isDel=sm.deleteStudent(sno1); } catch (IllegalArgumentException e) { logger.error(e.getMessage()); } if(isDel){ System.out.println("删除成功!"); }else{ System.out.println("删除失败!"); } break; default: break; } } }}
- 列表内容 log4j.properties 配置
log4j.rootLogger=debug,myfilelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target=System.errlog4j.appender.console.layout=org.apache.log4j.SimpleLayoutlog4j.appender.myfile=org.apache.log4j.FileAppenderlog4j.appender.myfile.File=log/student.loglog4j.appender.myfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.myfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %p %m%n
log4j的jar文件 自己去下载。。。
XML student.dtd 文件
<!ELEMENT students (student*)><!ELEMENT student (sname,sex,age?)><!ATTLIST student sno CDATA #REQUIRED><!ELEMENT sname (#PCDATA)><!ELEMENT sex (#PCDATA)><!ELEMENT age (#PCDATA)>
Xml文件 student.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><students> <student sno="1001"> <sname>张三</sname> <sex>男</sex> <age>23</age> </student> <student sno="1002"> <sname>李影</sname> <sex>女</sex> <age>22</age> </student> <student sno="1003"> <sname>王五</sname> <sex>男</sex> <age>23</age> </student> <student sno="1004"> <sname>路正</sname> <sex>男</sex> <age>21</age> </student></students>
如果我的这篇博文 有助于您了解基础的xml解析的话,您可以可以随便赏点小编。
1 0
- xml文件解析-DOM4J
- dom4j解析Xml文件
- DOM4J 解析XML文件
- dom4j解析xml文件
- dom4j解析XML文件
- dom4j解析xml文件
- dom4j 解析xml文件
- dom4j解析xml文件
- dom4j解析XML文件
- Dom4J解析XML文件
- dom4j解析xml文件
- Dom4j解析xml文件
- Dom4j 解析xml文件
- dom4j解析xml文件
- dom4j解析xml文件
- dom4j解析xml文件
- dom4j解析xml文件
- DOM4J解析XML文件
- 深度探索QT窗口系统---几何篇4
- shell脚本编程(一)
- php app 接口 封装xml
- 添加实时阴影
- 句柄和指针
- DOM4J 解析XML文件
- ASP.NET 跳转页面数据的获取 (使用html控件)
- 斐波那契数列 1, 1, 2, 3, 5, 8, 13, 21, 34...
- java中不带package和带package的编译运行方式
- 信号的基本概念
- test
- sublime text3下的bootstrap插件
- No CurrentSessionContext configured 沒配置
- 运输层