Dom4j与Jdom解析文档

来源:互联网 发布:web前端连接数据库 编辑:程序博客网 时间:2024/04/28 01:53

1.使用dom4j解析文档,解析的文件名称为:studentInfo.xml,该文件放在src目录下

<?xml version="1.0" encoding="UTF-8"?><students><student no="001"><name>张三</name><birthday>1990/5/11</birthday><remark>测试数据</remark></student><student no="002"><name>李四</name><birthday>1990/5/20</birthday><remark>测试数据2</remark></student></students>

2.引入dom4j的jar包,student的实体对象

package com.xilin.jiong.entity;public class Student {/* * 学号 */private String no;/* * 姓名 */private String name;/* * 出生日期 */private String birthday;/* * 备注 */private String remark;public String getNo() {return no;}public void setNo(String no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}@Overridepublic String toString() {return "Student [no=" + no + ", name=" + name + ", birthday="+ birthday + ", remark=" + remark + "]";}}
3.dom4j具体的实现如下:

package com.xilin.jiong.study.dom4j;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.xilin.jiong.entity.Student;public class Dom4jStudy {public static void main(String[] args) {List<Student> students = null;Document document = null;document = getDocument("studentInfo.xml");if (null!=document) {students = readNodes(document);}else {System.err.println("获取文档对象失败,无法解析!");}System.err.println(students);}/** * 获取解析文档的内容 * @param document 文档解析的内容 * @return 解析的对象 */public static List<Student> readNodes(Document document) {List<Student> students = new ArrayList<Student>();//获取根节点Element rootElement = document.getRootElement();System.out.println("根节点:"+rootElement);//获取根节点下的子节点List<Element> childElements = rootElement.elements();Student student = null;//循环遍历根节点下的子节点         for (Element childelement : childElements) {         student = new Student();//获取子节点的属性         String no = childelement.attributeValue("no");         student.setNo(no);                  //获取子节点下的子节点集合         List<Element> subElements = childelement.elements();         //循环遍历子节点下的集合信息         for (Element subElement : subElements) {         if ("name".equals(subElement.getName())) { String name = subElement.getTextTrim(); student.setName(name); }else if ("birthday".equals(subElement.getName())) { String birthday = subElement.getTextTrim(); student.setBirthday(birthday); }else { String remark = subElement.getTextTrim(); student.setRemark(remark); }}                  students.add(student);}return students;}/** * 获取解析的文档内容 * @param filename 解析的文件名称 * @return 获取解析的文档信息 */public static Document getDocument(String filename){SAXReader saxReader = new SAXReader();Document document = null;InputStream inputStream = Dom4jStudy.class.getClassLoader().getResourceAsStream(filename);try {document = saxReader.read(inputStream);} catch (DocumentException e) {e.printStackTrace();}finally{if (null!=inputStream) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return document;}}
5.使用jdom的解析方式如下,首先引入jdom2的jar包

具体的代码:

package com.xilin.jiong.study.jdom;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import com.xilin.jiong.entity.Student;public class JdomStudy {public static void main(String[] args) {Document document = getDocument("studentInfo.xml");List<Student> students = null;//文档流不为空if (null != document) {//解析成对象students = readNodes(document);}else {System.out.println("文档流为空,无法解析!");}System.out.print(students);}/** * 获取需要解析的文档流 *  * @param filename *            解析的文件名称 * @return 获取需要解析的文档流 */public static Document getDocument(String filename) {//文档解析器SAXBuilder saxBuilder = new SAXBuilder();//解析的文件输入流InputStream inputStream = null;//解析的文档流Document document = null;try {inputStream = JdomStudy.class.getClassLoader().getResourceAsStream(filename);document = saxBuilder.build(inputStream);} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (null != inputStream) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return document;} /** * 读取对象 * @param document 文档输入流 * @return 对象集合 */public static List<Student> readNodes(Document document) {List<Student> students = new ArrayList<Student>();//获取根节点Element rootElement = document.getRootElement();System.out.println("根节点:"+rootElement.getName());//获取根下面的子节点List<Element>childsElements = rootElement.getChildren();//Student 对象Student student = null;//循环遍历根下面的子节点的信息for(Element childElement : childsElements){student = new Student();//获取子节点属性名称(no)String no = childElement.getAttributeValue("no");student.setNo(no);//子节点下的子节点集合List<Element> subElements = childElement.getChildren();//循环遍历子节点的子节点信息for (Element element : subElements) {if ("name".equals(element.getName())) {String name = element.getTextTrim();student.setName(name);}else if ("birthday".equals(element.getName())) {String birthday = element.getTextTrim();student.setBirthday(birthday);}else {String remark = element.getTextTrim();student.setRemark(remark);}}students.add(student);}return students;}}




0 0