分别使用dom和dom4j解析XML文档
1.dom和dom4j的特点
- dom是基于XML的树结构来完成解析的。dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作。dom解析XML的方式非常适用于多次访问XML的应用程序,但是比较消耗资源。
- 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>
准备:解析XML时,会用到以下对象,学习时了解一下,更容易理解:
①Document对象:代表整个XML对象,所有其他的节点(Node)都以一定的顺序包含在Document对象内,排列成一个树状结构,可以通过遍历这棵"树"来得到XML文档的所有内容。
②NodeList对象:包含了一个或者多个节点的列表,该数组可按下标查询。
③Node对象:DOM结构中最基本的对象,代表了文档树中的一个抽象节点。实际使用时,很少真正用到Node对象,一般会用Element、Text、等Node对象的子对象来操作文档。
④Element对象:代表XML文档中的标签元素,继承自Node。有存取标签属性的方法。
使用面向对象对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文档
准备:
- 下载dom4j包,可以从官网下载:https://dom4j.github.io/ 。dom4j和jdk版本尽量匹配,否则会报警告。
- 导入包:将下载好的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文档相关推荐
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- Dom4j 解析Xml文档及 XPath查询 学习笔记
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- Dom4j 解析Xml文档及XPath查询 学习笔记
本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...
- Javaweb使用dom4j解析xml文档的一般姿势
使用dom4j解析xml文档之前必须引入jar public class TestDom4j {@Testpublic void testReadWebXML() {try {// 1.获取解析器SA ...
- maven中用dom4j解析xml文档
1.需求分析 关于dom4j的详细使用方法请参考:https://blog.csdn.net/qq_41860497/article/details/84339091 在xml中存储了过滤器的的初始化 ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- DOM4J解析XML文档
一.XML概述 XML可扩展标记语言,类似HTML XML的设计宗旨是传输数据而非显示数据 XML被设计具有自我描述性 XML没有被预定义,需要自己定义标签 XML不是HTML的替代,它们两个是为不同 ...
- 使用DOM4J解析XML文档
先下载dom4j jar包,引入到项目中后开始使用.下载连接在文章末尾. 示例:解析如下phoneInfo.xml phoneInfo.xml <?xml version="1.0&q ...
- Java-使用Dom4j解析xml文档
1. xml介绍 可扩展的标记性语言 2. 作用 存储数据 可以作为项目的配置文件 作为网络传输数据的格式(现在一般以json为主) 3. 语法注意事项 语法与HTML类似 一定要有开头的xml声明 ...
最新文章
- java 变量分配_Java中成员变量分配在哪个空间?
- group by具有去重的功能
- 【每周NLP论文推荐】从预训练模型掌握NLP的基本发展脉络
- HDU-1811 Rank of Tetris
- 11、mysql数据表中数据的查询(3)
- 真正的程序员,从来不会告诉你这些事!
- 计算机组成原理组合逻辑控制器实验报告,计算机组成原理实验报告—认识性实验 华北电力大学.doc...
- 第一篇博客 记录自己对spring bean的理解
- 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标
- PHP实现留言板功能
- 使谷歌浏览器兼容ie浏览器
- mysql 词频分析工具_hive进行词频统计
- 父级fixed_子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案...
- c语言阿基米德螺旋线编程,阿基米德螺旋线进刀凸轮外轮廓铣削的编程技巧
- 网页版短信平台发送教程【图文】
- python仿360界面_python实现360的字符显示界面
- json转换成excel在线js小工具分享【不限制大小】
- Android源码编译(Ubuntu 14.04)
- 赵小楼《天道》《遥远的救世主》深度解析(117)分离已有的各种相,得你想要的结果
- leaflet图标样式
热门文章
- dgl学习笔记05-在GPU上使用DGL图
- 电商平台资金结算流程是什么样的?
- Avue2 wangeditor(富文本) 支持视频上传
- “无法播放视频。很抱歉,无法播放此视频” 错误提示的两个原因
- 恐怕我今天不能在计算机上工作英语,全新版大学英语综合教程3课后句子翻译(中英对照)...
- 计算机软件及其使用课件,计算机软件及其使用课件
- unity3d 牧师与恶魔动作分离
- Matlab中使用LMI toolboxLMI
- springboot 实现简单注册功能(附带源码)
- Excel数据分析——函数集锦