dom解析器

dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式显然是一种比较消耗内存的方式,对于像手机这样的移动设备来讲,内存是非常有限的,所以对于比较大的XML文件,不推荐使用这种方式,但是Dom也有它的优点,它比较直观,在一些方面比SAX方式比较简单。在xml文档比较小的情况下也可以考虑使用dom方式

解析步骤:

1、创建并获取DOM解析器工厂对象

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2、创建并获取DOM解析器对象

DocumentBuilder builder = factory.newDocumentBuilder();

3、创建并获取Document对象

Document document = builder.parse(inputStream);

4、获得文档的根元素,在下面的xml文件中根元素为courseInfo

Element root = document.getDocumentElement();

5、获取名称为student的子节点(只有一个)

Element studentElement = (Element) root.getElementsByTagName("student").item(0);

6、获取名称为courseList的子节点列表(有多个)

NodeList courseNodeList = root.getElementsByTagName("courseList");
7、遍历节点列表
for (int i = 0; i < nodeList.getLength(); i++) {//获得一个子节点Element element = (Element) nodeList.item(i);String courseName = element.getElementsByTagName("courseName").item(0).getFirstChild().getNodeValue();String courseId = element.getElementsByTagName("courseId").item(0).getFirstChild().getNodeValue();String teacherName = element.getElementsByTagName("teacherName").item(0).getFirstChild().getNodeValue();String teacherId = element.getElementsByTagName("teacherId").item(0).getFirstChild().getNodeValue();String room = element.getElementsByTagName("room").item(0).getFirstChild().getNodeValue();int day = Integer.parseInt(element.getElementsByTagName("day").item(0).getFirstChild().getNodeValue());int startWeek = Integer.parseInt(element.getElementsByTagName("startWeek").item(0).getFirstChild().getNodeValue());int totalWeeks = Integer.parseInt(element.getElementsByTagName("totalWeeks").item(0).getFirstChild().getNodeValue());int startSection = Integer.parseInt(element.getElementsByTagName("startSection").item(0).getFirstChild().getNodeValue());int totalSection = Integer.parseInt(element.getElementsByTagName("totalSection").item(0).getFirstChild().getNodeValue());int singleOrDouble = Integer.parseInt(element.getElementsByTagName("singleOrDouble").item(0).getFirstChild().getNodeValue());course = new Course(courseName,courseId,teacherName,teacherId,room,day,startWeek,totalWeeks,startSection,totalSection,singleOrDouble);courseList.add(course);}

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<courseInfo><courseList><courseId>000001</courseId><courseName>C语言</courseName><day>1</day><room>励耘楼</room><singleOrDouble>0</singleOrDouble><startSection>1</startSection><startWeek>1</startWeek><teacherId>100001</teacherId><teacherName>肖红</teacherName><totalSection>2</totalSection><totalWeeks>17</totalWeeks></courseList><courseList><courseId>000002</courseId><courseName>计算机算法</courseName><day>1</day><room>综合楼</room><singleOrDouble>0</singleOrDouble><startSection>5</startSection><startWeek>1</startWeek><teacherId>100002</teacherId><teacherName>陈红</teacherName><totalSection>2</totalSection><totalWeeks>17</totalWeeks></courseList><courseList><courseId>000003</courseId><courseName>C++面向对象编程语言</courseName><day>3</day><room>综合楼</room><singleOrDouble>0</singleOrDouble><startSection>5</startSection><startWeek>1</startWeek><teacherId>100003</teacherId><teacherName>杨平</teacherName><totalSection>2</totalSection><totalWeeks>17</totalWeeks></courseList><student><grade>2013</grade><major>计算机科学与技术</major><name>张三</name><schools>信息技术学院</schools><studentid>1301010005</studentid></student>
</courseInfo>

实体类

Student.java

public class Student {//学生姓名private String name;//学号private String studentid;//专业private String major;//学院private String schools;//年级private String grade;public Student(String name, String studentid, String major, String schools, String grade) {super();this.name = name;this.studentid = studentid;this.major = major;this.schools = schools;this.grade = grade;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getStudentid() {return studentid;}public void setStudentid(String studentid) {this.studentid = studentid;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public String getSchools() {return schools;}public void setSchools(String schools) {this.schools = schools;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}}

Course.java

public class Course {//课程名称private String courseName;//课程idprivate String courseId;//教室名称private String teacherName;//教室idprivate String teacherId;//教室private String room;//具体到星期几private int day;//开始周private int startWeek;//总周数private int totalWeeks;//开始上课节数private int startSection;//上课总周数private int totalSection;//单双周,单周为1,双周为2,部分为0private int singleOrDouble;public Course(String courseName, String courseId, String teacherName, String teacherId, String room, int day,int startWeek, int totalWeeks, int startSection, int totalSection, int singleOrDouble) {super();this.courseName = courseName;this.courseId = courseId;this.teacherName = teacherName;this.teacherId = teacherId;this.room = room;this.day = day;this.startWeek = startWeek;this.totalWeeks = totalWeeks;this.startSection = startSection;this.totalSection = totalSection;this.singleOrDouble = singleOrDouble;}public int getSingleOrDouble() {return singleOrDouble;}public void setSingleOrDouble(int singleOrDouble) {this.singleOrDouble = singleOrDouble;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}public String getCourseId() {return courseId;}public void setCourseId(String courseId) {this.courseId = courseId;}public String getTeacherName() {return teacherName;}public void setTeacherName(String teacherName) {this.teacherName = teacherName;}public String getTeacherId() {return teacherId;}public void setTeacherId(String teacherId) {this.teacherId = teacherId;}public String getRoom() {return room;}public void setRoom(String room) {this.room = room;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}public int getStartWeek() {return startWeek;}public void setStartWeek(int startWeek) {this.startWeek = startWeek;}public int getTotalWeeks() {return totalWeeks;}public void setTotalWeeks(int totalWeeks) {this.totalWeeks = totalWeeks;}public int getStartSection() {return startSection;}public void setStartSection(int startSection) {this.startSection = startSection;}public int getTotalSection() {return totalSection;}public void setTotalSection(int totalSection) {this.totalSection = totalSection;}}

CourseInfo.java

import java.util.ArrayList;
import java.util.List;public class CourseInfo {//学生private Student student;//课程列表private List<Course> courseList = new ArrayList<Course>();public CourseInfo(){}public CourseInfo(Student student, List<Course> courseList) {super();this.student = student;this.courseList = courseList;}public Student getStudent() {return student;}public void setStudent(Student student) {this.student = student;}public List<Course> getCourseList() {return courseList;}public void setCourseList(List<Course> courseList) {this.courseList = courseList;}}

xml.java

package com.example.administrator.httpconnectlogin.Tools;import com.example.administrator.httpconnectlogin.entity.Course;
import com.example.administrator.httpconnectlogin.entity.CourseInfo;
import com.example.administrator.httpconnectlogin.entity.Student;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;/*** Created by Administrator on 2016/10/12.*/
public class XmlUtil {public static CourseInfo xmlToObject_CourseInfo(String xml){CourseInfo courseInfo = null;Student student = null;List<Course> courseList = new ArrayList<>();InputStream inputStream = new ByteArrayInputStream(xml.getBytes());//创建DOM解析器工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {//创建DOM解析器DocumentBuilder builder = factory.newDocumentBuilder();//获取到了document对象//Document document = builder.parse(inputStream);Document document = builder.parse(inputStream);//获得文档的根元素Element root = document.getDocumentElement();//获得名称为student的元素节点(student只有一个节点)Element studentElement = (Element) root.getElementsByTagName("student").item(0);student = getStudentObject(studentElement);//得到文档中名称为courseList的元素的节点列表NodeList courseNodeList = root.getElementsByTagName("courseList");courseList =getCourseListObject(courseNodeList);courseInfo = new CourseInfo(student,courseList);} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return courseInfo;}private static Student getStudentObject(Element element){String name = element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();String studentid = element.getElementsByTagName("studentid").item(0).getFirstChild().getNodeValue();String major = element.getElementsByTagName("major").item(0).getFirstChild().getNodeValue();String schools =element.getElementsByTagName("schools").item(0).getFirstChild().getNodeValue();String grade = element.getElementsByTagName("grade").item(0).getFirstChild().getNodeValue();Student student = new Student(name,studentid,major,schools,grade);return student;}private static List<Course> getCourseListObject(NodeList nodeList){List<Course> courseList = new ArrayList<>();Course course = null;for (int i = 0; i < nodeList.getLength(); i++) {//获得一个子节点Element element = (Element) nodeList.item(i);String courseName = element.getElementsByTagName("courseName").item(0).getFirstChild().getNodeValue();String courseId = element.getElementsByTagName("courseId").item(0).getFirstChild().getNodeValue();String teacherName = element.getElementsByTagName("teacherName").item(0).getFirstChild().getNodeValue();String teacherId = element.getElementsByTagName("teacherId").item(0).getFirstChild().getNodeValue();String room = element.getElementsByTagName("room").item(0).getFirstChild().getNodeValue();int day = Integer.parseInt(element.getElementsByTagName("day").item(0).getFirstChild().getNodeValue());int startWeek = Integer.parseInt(element.getElementsByTagName("startWeek").item(0).getFirstChild().getNodeValue());int totalWeeks = Integer.parseInt(element.getElementsByTagName("totalWeeks").item(0).getFirstChild().getNodeValue());int startSection = Integer.parseInt(element.getElementsByTagName("startSection").item(0).getFirstChild().getNodeValue());int totalSection = Integer.parseInt(element.getElementsByTagName("totalSection").item(0).getFirstChild().getNodeValue());int singleOrDouble = Integer.parseInt(element.getElementsByTagName("singleOrDouble").item(0).getFirstChild().getNodeValue());course = new Course(courseName,courseId,teacherName,teacherId,room,day,startWeek,totalWeeks,startSection,totalSection,singleOrDouble);courseList.add(course);}return courseList;}
}

Dom解析器使用实例相关推荐

  1. JAVA与DOM解析器基础 学习笔记

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理 ...

  2. php中html解析器,PHP Simple HTML DOM解析器

    一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的h ...

  3. php 解析 标记,如何使用PHP-simple-HTML DOM解析器获取标记的属性

    PHP Simple HTML DOM parser 要废弃网站数据,但不幸的是无法提取我想要的数据.我也试过用谷歌搜索文档,但没能解决这个问题.我想要废弃的代码结构是这样的. Some conten ...

  4. 极其简便的PHP HTML DOM解析器PHP Simple HTML DOM Parser/有中文手册

    极其简便的PHP HTML DOM解析器PHP Simple HTML DOM Parser,有中文手册,对于需要分析HTML代码dom结构的php开发者来说,是一个极其有用的函数库,使用Jquery ...

  5. XML DOM 解析器概述

    大多数浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 JavaScript 可存取的对象(XML DOM). XML 解析器 XML DOM 包含了遍历 XML 树, ...

  6. python的网页解析器_Python网页解析器使用实例详解

    python 网页解析器 1.常见的python网页解析工具有:re正则匹配.python自带的html.parser模块.第三方库BeautifulSoup(重点学习)以及lxm库. 2.常见网页解 ...

  7. java xml 查询_Java DOM解析器 - 查询XML文档

    演示示例 这是需要我们查询的输入XML文件: Ferarri 101 Ferarri 201 Ferarri 301 Lamborgini 001 Lamborgini 002 Lamborgini ...

  8. java dom cdata_java – 通过DOM解析器从XML处理CDATA

    我以前从未处理过XML,所以我不确定如何在XML文件中处理CDATA.我迷失在节点,父节点,子节点,nList等中. 谁能告诉我这些代码片段的问题是什么? 我的getTagValue()方法适用于除& ...

  9. php写html就错误500,php – 简单的html dom解析器返回错误500

    我在这个例子中使用simple_html_dom.php库 但是我在类里面有错误500,当我在浏览器中输入url可以吗? 我在这个阵列中有一些vaules $result= Array ( [Aven ...

最新文章

  1. 当前安卓App加固到底该如何做到防篡改?
  2. POJ 2453 贪心应用
  3. ResNet在分别在Keras和tensorflow框架下的应用案例
  4. 正则表达式的基本语法[转]
  5. moodle平台安装及环境配置(包括安装过程详细截图)
  6. vlfeat工具包的MATLAB安装
  7. #FME#FME将TXT转成shape
  8. 丧心病狂!最新NLP模型的写作水平已突破次元壁
  9. [AC自动机]luoguP3966
  10. xshell6配色-保护您的眼睛
  11. 别让西药毁了凉茶!盒马牵手平安堂,能放心喝的凉茶来了
  12. TP 全系列调试通用参考说明
  13. 清华计算机类出国留学,清华大学的王牌专业及出国留学率.doc
  14. python爬虫爬取股票评论,调用百度AI进行语义分析, matlab观察股票涨跌和评论的关系
  15. android am pm常用的一些命令
  16. 记一次配置华为路由器DDNS(花生壳)动态域名解析
  17. 用计算机绘制阀体各零件步骤,UG10.0经典实例之液压球阀建模方法
  18. D3D字体-ID3DXFont[转载]
  19. 通用人工智能可行吗?组合泛化视角漫谈
  20. Windows 8: 将英文系统转换为中文

热门文章

  1. INE首届共识大会 | 白眉:一起向百万级领地主进军
  2. 北京各城区二手房数据分析+可视化
  3. node.js笔记(千锋kerwin老师同款)
  4. 子群,真子群,正规子群,真正规子群怎么打符号?
  5. /plus/list.php?tid= dedecms,织梦DedeCMS5.7全站实现伪静态的方法
  6. 五分钟带你玩转docker(三)全网最新最简单docker安装方式,楼主亲测
  7. CSS 的快乐:画一个可爱的三只小鸟 Button
  8. 蓝鸟中文编程2.7破解版
  9. 丹佛斯变频器al13故障_丹佛斯变频器十大常见故障分析及维修对策
  10. 主板超频特色技术大比拼!