XML项目工程展示图如下图:

student.xml 文件展示:<?xml version="1.0" encoding="utf-8" ?>
<person><student id='1'><name>余超</name><sex>男</sex><desc>一个执着而又天真的孩子</desc>        </student><student id='2'><name>马靖</name><sex>女</sex><desc>一个特别难追求的女孩子</desc>        </student>
</person>Student实体类的展示:其作用就是用于临时保存xml文件中的数据到属性中package net.nyist.xmlparse.domain;import java.io.Serializable;/*** @author yuchao* * @school 南阳理工软件学院移动设备应用与开发移动四班* * @email yu0312chao@163.com* * @time 2014年9月30日 下午10:52:47*/@SuppressWarnings("serial")
public class Student implements Serializable {private int id;private String name;private String sex;private String desc;public Student() {}public Student(int id, String name, String sex, String desc) {this.id = id;this.name = name;this.sex = sex;this.desc = desc;}public int getId() {return id;}public void setId(int id) {this.id = id;}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 getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", sex=" + sex+ ", desc=" + desc + "]";}
}

方法一:通过DOM来解析XML文件

package net.nyist.xmlparse.parse.dom

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import net.nyist.xmlparse.domain.Student;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;/*** @author yuchao* * @school 南阳理工软件学院移动设备应用与开发移动四班* * @email yu0312chao@163.com* * @time 2014年9月30日 下午11:12:57*/public class DocumentBuilderFactoryDemo {public static void main(String[] args) {

        long start = System.currentTimeMillis();/** 首先得到:得到 DOM 解析器的工厂实例 */DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();List<Student> students = new ArrayList<Student>();try {/** 然后从 DOM 工厂获得 DOM 解析器 */DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();InputStream is = DocumentBuilderFactoryDemo.class.getClassLoader().getResourceAsStream("student.xml");Document document = documentBuilder.parse(is);/** 得到 XML 文档的根节点 */Element element = document.getDocumentElement();NodeList nodeList = element.getElementsByTagName("student");Student student = null;for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);int id = Integer.parseInt(node.getAttributes().getNamedItem("id").getNodeValue());String nameValue = "";String sexValue = "";String descValue = "";if (node.hasChildNodes()) {NodeList childNodes = node.getChildNodes();for (int j = 0; j < childNodes.getLength(); j++) {Node node2 = childNodes.item(j);if ("name".equals(node2.getNodeName())) {nameValue = node2.getFirstChild().getTextContent();} else if ("sex".equals(node2.getNodeName())) {sexValue = node2.getFirstChild().getTextContent();} else if ("desc".equals(node2.getNodeName())) {descValue = node2.getFirstChild().getTextContent();}}student = new Student(id, nameValue, sexValue, descValue);students.add(student);}}} catch (Exception e) {e.printStackTrace();}for (int i = 0; students != null && students.size() > 0&& i < students.size(); i++) {System.out.println(students.get(i));}     System.out.println("共用时:"+(System.currentTimeMillis()-start));}
}

方法二:用SAX解析XML文件

package net.nyist.xmlparse.parse.sax;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import net.nyist.xmlparse.domain.Student;import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;/*** @author yuchao* * @school 南阳理工软件学院移动设备应用与开发移动四班* * @email yu0312chao@163.com* * @time 2014年10月1日 下午6:38:52* * @deprecated 本类是用来对于XML文本的解析类*/public class PersonHandle extends DefaultHandler {private Student student;private List<Student> students;/**对于这个属性的使用主要作用是为了用来存放标签的名称,由此而获得这个标签下的文本内容的值*/private String tagName;public List<Student> getStudents() {return students;}public InputSource resolveEntity(String publicId, String systemId)throws IOException, SAXException {return null;}public void setDocumentLocator(Locator locator) {System.out.println("加载器开始处理xml文档........");}public void startDocument() throws SAXException {System.out.println("文档开始加载.........");students = new ArrayList<Student>();}public void endDocument() throws SAXException {System.out.println("xml文档处理结束.........");}public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {tagName = qName;if ("student".equals(qName)) {student = new Student();int id = Integer.parseInt(attributes.getValue("id"));student.setId(id);}}public void endElement(String uri, String localName, String qName)throws SAXException {if ("student".equals(qName)) {students.add(student);}/**将其值变为null的主要目的是为了防止再次遍历的时候保存了结尾标签,这样会有空值的存在*/tagName = null;}public void characters(char ch[], int start, int length)throws SAXException {if (!"".equals(tagName) && tagName != null) {if ("name".equals(tagName)) {student.setName(new String(ch, start, length));} else if ("sex".equals(tagName)) {student.setSex(new String(ch, start, length));} else if ("desc".equals(tagName)) {student.setDesc(new String(ch, start, length));}}}public static void main(String[] args) {PersonHandle personHandle =new PersonHandle();System.out.println(personHandle.getStudents());}
}package net.nyist.xmlparse.parse.sax;import java.io.IOException;
import java.io.InputStream;
import java.util.List;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import net.nyist.xmlparse.domain.Student;import org.xml.sax.SAXException;/*** @author yuchao* * @school 南阳理工软件学院移动设备应用与开发移动四班* * @email yu0312chao@163.com* * @time 2014年10月1日 下午6:30:51*/public class SaxFacroryParseDemo {public static void main(String[] args) {long start =System.currentTimeMillis();/** 创建SAX解析器工厂对象*/SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();try {/** 使用解析器工厂创建解析器实例 */SAXParser saxParser = saxParserFactory.newSAXParser();/**加载资源文件*/InputStream is = SaxFacroryParseDemo.class.getClassLoader().getResourceAsStream("student.xml");/*** 如果采用SAX方式来对于XML文件的处理的时候必须要使用xml文件的处理类:* 对于本例我使用默认的处理类PersonHandle,此类必须要继承 DefaultHandler 这个类,然后重载这个类的方法,以至于对于xml文档的处理* * */PersonHandle personHandle = new PersonHandle();saxParser.parse(is, personHandle);List<Student> students = personHandle.getStudents();System.out.println("打印文档的内容:");for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共用时:"+(System.currentTimeMillis()-start));} catch (ParserConfigurationException | SAXException | IOException e) {e.printStackTrace();}}
}

方法三:jdom解析XML文件:需要引入jdom.jar包

package net.nyist.xmlparse.parse.jdom;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import net.nyist.xmlparse.domain.Student;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;/*** @author yuchao* * @school 南阳理工软件学院移动设备应用与开发移动四班* * @email yu0312chao@163.com* * @time 2014年10月1日 下午9:08:47*/public class SAXBuilderDemo {@SuppressWarnings("unchecked")public static void main(String[] args) {long start = System.currentTimeMillis();SAXBuilder saxBuilder = new SAXBuilder();/**加载资源文件*/InputStream in = SAXBuilderDemo.class.getClassLoader().getResourceAsStream("student.xml");try {Document document = saxBuilder.build(in);Element element = document.getRootElement();List<Element> list = element.getChildren();if (list != null && list.size() > 0) {List<Student> students = new ArrayList<Student>();for (int i = 0; i < list.size(); i++) {Element studentElement = list.get(i);int id = studentElement.getAttribute("id").getIntValue();String nameValue = studentElement.getChild("name").getText();String sexValue = studentElement.getChild("sex").getText();String descValue = studentElement.getChild("desc").getText();Student student = new Student(id, nameValue, sexValue,descValue);students.add(student);}for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共用时:"+ (System.currentTimeMillis() - start));}} catch (JDOMException | IOException e) {e.printStackTrace();}}
}

方法四:通过dom4j解析XML文件:引入两个包dom4j.jar 与jaxen.jar

package net.nyist.xmlparse.parse.dom4j;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import net.nyist.xmlparse.domain.Student;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;/*** @author yuchao** @school 南阳理工软件学院移动设备应用与开发移动四班** @email yu0312chao@163.com** @time  2014年10月1日 下午9:45:12*/public class SAXReaderDemo {@SuppressWarnings("unchecked")public static void main(String[] args) {long start = System.currentTimeMillis();SAXReader saxReader =new SAXReader();InputStream in =SAXReaderDemo.class.getClassLoader().getResourceAsStream("student.xml");try {Document document = saxReader.read(in);Element element = document.getRootElement();List<Element> rootElements = element.elements();List<Student> students =new ArrayList<Student>();Student student =null;for (int i = 0;rootElements!=null && i < rootElements.size(); i++) {Element childElement =  rootElements.get(i);int id =Integer.parseInt(childElement.attribute("id").getText());String nameValue =childElement.elementText("name");String sexValue =childElement.elementText("sex");String descValue =childElement.elementText("desc");student =new Student(id, nameValue, sexValue, descValue);students.add(student);}for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共用时:"+ (System.currentTimeMillis() - start));} catch (DocumentException e) {e.printStackTrace();}}
}

转载于:https://www.cnblogs.com/yu0312chao/p/4002985.html

xml文件的解析过程详解相关推荐

  1. java spring bean配置文件_Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:be ...

  2. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  3. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  4. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  5. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

  6. DNS解析过程详解【转】

    转自:http://blog.chinaunix.net/uid-28216282-id-3757849.html 先说一下DNS的几个基本概念: 一. 根域 就是所谓的".",其 ...

  7. Tomcat中server.xml文件内各节点详解

    由于 Tomcat 基于 Java,实际上在各种 Linux 发行版里的配置方法都大同小异,只是我看见在 Arch Linux 环境里搭建 Tomcat 的文章比较少,所以在 Arch Linux 实 ...

  8. DNS原理及解析过程详解

    目录 1 域名系统概述 2 因特网的域名结构 3 域名服务器 4 域名的解析原理过程 4.1 DNS解析原理 4.2 域名解析过程 5 查询过程 5.1 演示整个查询过程 5.2 关于DNS解析的TT ...

  9. DNS解析过程详解[转载]

    先说一下DNS的几个基本概念: 一. 根域 就是所谓的".",其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里 ...

最新文章

  1. github分段下载
  2. 第十四课.Transformer
  3. 02.Apollo配置中心整合spring cloud zuul
  4. 【机器学习】机器学习可视化利器--Yellowbrick
  5. 三句代码调整进程优先级
  6. oracle的todate函数 不用英文,关于在mybaties 和 oracle的to_date函数的问题?
  7. visual报表服务器项目,为 Visual Studio ALM 创建报表服务器项目
  8. python的dev包怎么安装_几种Python包的安装方式
  9. xmlhelper (把实体对象转成xml文档)
  10. 学而思编程python软件怎么样_学而思编程社区缺点详细分析
  11. 工欲善其事,必先利其器——图文并茂详解VisualStudio使用技巧一
  12. sftp非交互式每日定时拉取增量数据文件至本地合并至存量
  13. 如何禁用或重新启用计算机的休眠功能
  14. 计算机技术未来的研究热点,计算机科学前沿热点及发展趋势
  15. java 中鼠标事件_Java中的鼠标事件
  16. java sqrt函数源码_Java sqrt源码解析
  17. 掌握这个小技巧,让你的 C++ 编译速度提升 50 倍!
  18. 新手轻松日赚300+搬砖项目详解
  19. erp 计算机语言,erp开发用什么语言
  20. 解决IDEA项目一直Updating Index

热门文章

  1. 软件工程师必须需要知道的职位英文缩写
  2. Word转PDF出现空白页面
  3. 百度地图端午出行报告:拼假出游,出程拥堵返程宽松
  4. 计算机网络传输分层模型
  5. Linux将两个文件合并
  6. electron集成arm64架构的nodejs addon插件
  7. 自我介绍的第一个帖子鸭
  8. ias mysql_MySQL 中 GROUP BY 基本实现原理
  9. LeetCode LCP 56. 信物传送(迪杰斯特拉-最短路径)
  10. setTimeout在vue中的正确使用