1.dom和dom4j的特点

  1. dom是基于XML的树结构来完成解析的。dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作。dom解析XML的方式非常适用于多次访问XML的应用程序,但是比较消耗资源。
  2. dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和易用的特点,同时他也是开放源代码的软件。如今越来越多Java软件都在使用dom4j来读写XML。

2.解析XML文档:

要解析的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<students><student><name>张三</name><age>20</age><school>bdqn</school></student><student><name>李四</name><age>22</age><school>bdqn</school></student>
</students>
  1. 准备:解析XML时,会用到以下对象,学习时了解一下,更容易理解:

    ①Document对象:代表整个XML对象,所有其他的节点(Node)都以一定的顺序包含在Document对象内,排列成一个树状结构,可以通过遍历这棵"树"来得到XML文档的所有内容。

    ②NodeList对象:包含了一个或者多个节点的列表,该数组可按下标查询。

    ③Node对象:DOM结构中最基本的对象,代表了文档树中的一个抽象节点。实际使用时,很少真正用到Node对象,一般会用Element、Text、等Node对象的子对象来操作文档。

    ④Element对象:代表XML文档中的标签元素,继承自Node。有存取标签属性的方法。

  2. 使用面向对象对XML进行解析:

    首先创建student类,根据解析XML文件后获得的值新建学生对象,用来输出信息

/*** student类* 属性:name age school* 方法:show()*/
public class Student {private String name;private String age;private String school;public Student() {}public Student(String name, String age, String school) {this.name = name;this.age = age;this.school = school;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}//打印学生信息public void showInfo(){System.out.println("姓名:"+this.name+"\n年龄:"+this.age+"\n学校:"+this.school);System.out.println("***********");}}
                               做好准备工作后,开始进行解析

1)使用dom解析XML文档

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;/*** DOM解析类* 属性: document name age school* 方法:getDom() showEle()*/
public class StudentDOM {//解析对象private Document document;//学生信息字段private String name,age,school;//生成dom树public void getDom(File file) {//创建解析器工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {//创建解析器对象DocumentBuilder builder = factory.newDocumentBuilder();//解析XMl文件得到Dom树;this.document=builder.parse(file);} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//解析XMLpublic void showEle(){//获得student节点node列表NodeList students = document.getElementsByTagName("student");//遍历循环student节点的子节点for (int i = 0; i < students.getLength(); i++) {//转换为标签元素Element student=(Element)students.item(i);//1.根据name节点获得姓名标签NodeList names = student.getElementsByTagName("name");for (int j = 0; j < names.getLength(); j++) {Element nameEle=(Element)names.item(j);//获得姓名标签的文本值this.name = nameEle.getTextContent();}//2.根据age节点获得年龄标签NodeList ages = student.getElementsByTagName("age");for (int j = 0; j < ages.getLength(); j++) {Element ageEle=(Element)ages.item(j);this.age = ageEle.getTextContent();}//3.根据school节点获得学校标签NodeList schools = student.getElementsByTagName("school");for (int j = 0; j < schools.getLength(); j++) {Element schoolEle=(Element)schools.item(j);this.school = schoolEle.getTextContent();}//根据获得信息新建学生对象,展示Student stu=new Student(name,age,school);stu.showInfo();}}}
import java.io.File;
/*** 测试类*/
public class StudentTest {public static void main(String[] args){//新建解析类对象StudentDOM studentDOM=new StudentDOM();//新建file对象File file=new File("src/exam2/Student.xml");//初始化 生成dom树studentDOM.getDom(file);//调用解析方法studentDOM.showEle();}
}

2)使用dom4j解析XML文档

准备:

  1. 下载dom4j包,可以从官网下载:https://dom4j.github.io/ 。dom4j和jdk版本尽量匹配,否则会报警告。
  2. 导入包:将下载好的jar包放在项目src目录下,右键 add as library
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;/*** 文档解析类 dom4j* 属性: document name age school* 方法:getDom() showXML()*/
public class stuDom4j {//新建document对象Document document=null;//新建学生属性private String name,age,school;//使用dom4j创建dom树public void getDom(File file){//创建SAXreader对象SAXReader reader=new SAXReader();try {//解析xml文件,获得dom树this.document=reader.read(file);} catch (DocumentException e) {e.printStackTrace();}}//解析XML文档public void showXML(){//获取根节点 studentsElement rootEle = document.getRootElement();//迭代输出根节点的子节点 studentIterator<Element> itStu = rootEle.elementIterator();while(itStu.hasNext()){//获得studnet元素节点Element stuEle = itStu.next();//1.根据name标签获得姓名Iterator<Element> itName = stuEle.elementIterator("name");while(itName.hasNext()){//获得name标签元素Element nameEle = itName.next();//获得name文本值this.name= nameEle.getText();}//2.根据age标签获得年龄Iterator<Element> itAge = stuEle.elementIterator("age");while(itAge.hasNext()){Element ageEle = itAge.next();this.age= ageEle.getText();}//3.根据school标签获得学校Iterator<Element> itSchool = stuEle.elementIterator("school");while(itSchool.hasNext()){Element schoolEle = itSchool.next();this.school= schoolEle.getText();}//根据获得信息新建学生对象,展示Student stu=new Student(name,age,school);stu.showInfo();}}}
import java.io.File;
/*** 测试类*/
public class stuDom4jTest {public static void main(String[] args) {stuDom4j stuDom4j=new stuDom4j();File file=new File("src/exam2/Student.xml");stuDom4j.getDom(file);stuDom4j.showXML();}
}

分别使用dom和dom4j解析XML文档相关推荐

  1. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  2. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  3. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  4. Javaweb使用dom4j解析xml文档的一般姿势

    使用dom4j解析xml文档之前必须引入jar public class TestDom4j {@Testpublic void testReadWebXML() {try {// 1.获取解析器SA ...

  5. maven中用dom4j解析xml文档

    1.需求分析 关于dom4j的详细使用方法请参考:https://blog.csdn.net/qq_41860497/article/details/84339091 在xml中存储了过滤器的的初始化 ...

  6. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  7. DOM4J解析XML文档

    一.XML概述 XML可扩展标记语言,类似HTML XML的设计宗旨是传输数据而非显示数据 XML被设计具有自我描述性 XML没有被预定义,需要自己定义标签 XML不是HTML的替代,它们两个是为不同 ...

  8. 使用DOM4J解析XML文档

    先下载dom4j jar包,引入到项目中后开始使用.下载连接在文章末尾. 示例:解析如下phoneInfo.xml phoneInfo.xml <?xml version="1.0&q ...

  9. Java-使用Dom4j解析xml文档

    1. xml介绍 可扩展的标记性语言 2. 作用 存储数据 可以作为项目的配置文件 作为网络传输数据的格式(现在一般以json为主) 3. 语法注意事项 语法与HTML类似 一定要有开头的xml声明 ...

最新文章

  1. java 变量分配_Java中成员变量分配在哪个空间?
  2. group by具有去重的功能
  3. 【每周NLP论文推荐】从预训练模型掌握NLP的基本发展脉络
  4. HDU-1811 Rank of Tetris
  5. 11、mysql数据表中数据的查询(3)
  6. 真正的程序员,从来不会告诉你这些事!
  7. 计算机组成原理组合逻辑控制器实验报告,计算机组成原理实验报告—认识性实验 华北电力大学.doc...
  8. 第一篇博客 记录自己对spring bean的理解
  9. 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标
  10. PHP实现留言板功能
  11. 使谷歌浏览器兼容ie浏览器
  12. mysql 词频分析工具_hive进行词频统计
  13. 父级fixed_子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案...
  14. c语言阿基米德螺旋线编程,阿基米德螺旋线进刀凸轮外轮廓铣削的编程技巧
  15. 网页版短信平台发送教程【图文】
  16. python仿360界面_python实现360的字符显示界面
  17. json转换成excel在线js小工具分享【不限制大小】
  18. Android源码编译(Ubuntu 14.04)
  19. 赵小楼《天道》《遥远的救世主》深度解析(117)分离已有的各种相,得你想要的结果
  20. leaflet图标样式

热门文章

  1. dgl学习笔记05-在GPU上使用DGL图
  2. 电商平台资金结算流程是什么样的?
  3. Avue2 wangeditor(富文本) 支持视频上传
  4. “无法播放视频。很抱歉,无法播放此视频” 错误提示的两个原因
  5. 恐怕我今天不能在计算机上工作英语,全新版大学英语综合教程3课后句子翻译(中英对照)...
  6. 计算机软件及其使用课件,计算机软件及其使用课件
  7. unity3d 牧师与恶魔动作分离
  8. Matlab中使用LMI toolboxLMI
  9. springboot 实现简单注册功能(附带源码)
  10. Excel数据分析——函数集锦