dom4j关于Element和Node的理解
Element和Node的异同
Element是使用dom4j一开始就能用到的。一般就是使用Element对象调用elements()方法获取其下的所有子元素(就只是子元素,没有孙子元素)。这样一来有个缺点,就是当树很深的话,一次只能遍历一层,你得循环套循环,才能找到孙子的孙子。
所以就有Xpath的技术了,它就可以迅速定位到你要的位置,不管多深(前提你得知道树的层次,作为参数传送到位置)。在这一块我们用的Node。
但是我用的过程中,发现Element和Node对象可以互相转化。这就让我很疑惑,它俩啥关系?而且啥时候用Element啥时候用Node呢?
翻阅文档可以看出,Node是父类,Element是它的间接子类。
可以说Element对它自己的要求更高些,因为它是在Node的基础上扩建的。所以Element里面的东西更为丰富。
看下面这个代码:
Demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<companys><company id="1001"><name>万科A</name><address>广东深圳</address></company><company id="1002"><name>恒大B</name><address>广东广州</address></company><company id="1003"><name>金地C</name><address>北京</address></company><company id="1006"><name>绿地D</name><address>上海</address></company>
</companys>
TestXML.java
import java.io.File;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;public class TestNode {public static void main(String args[]) {try {SAXReader reader = new SAXReader();File xmlFile = new File("E:\\demo.xml");Document doc = reader.read(xmlFile);// 得到根标签Element root = doc.getRootElement();
// 遍历根元素下的所有元素Iterator<Element> it = root.elementIterator();while(it.hasNext()) {System.out.println(it.next());}System.out.println("----------------------------");
// 遍历根元素下的所有节点for(int i=0;i<root.nodeCount();i++) {System.out.println(root.node(i));}} catch(Exception e) {e.printStackTrace();}}
}
输出结果如下:
你会发现Node对象比Element对象多,仔细再看,你会发现Node对象不包含换行符和制表位,所以它才输出的多。
总结:Element是Node的子类,所以Element可以上转型为Node对象,也就是子类可以转换为父类。与此同时,Node也可以转为Element(这里姑且可认为下转型,但一般java中是不支持的,因为对于一个父类和子类,从父类转到子类,必然增加一些属性,java根本不知道值是多少,反之,则可以),这样,Node中势必会把换行符和制表符那些对象丢掉。
dom4j关于Element和Node的理解相关推荐
- Element和Node的区别你造吗?
1.写在前面 我们经常使用document.getElementById去获取DOM中的元素,也会使用childNodes来获取子节点.那么Element和Node的区别是什么?而什么又是HTMLCo ...
- JavaScript中Element与Node的区别,children与childNodes的区别
关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别. Node(节点)是DOM层次结构中的任何类型的对象的通用名称 ...
- dom4j的Element
1,Element其中的一个Element为dom4j,创建Element,通过DocumentHelper.createElement(name) 如:Element result=Document ...
- 基于Vue+Element UI+Node+MongoDB的医院门诊预约挂号系统
目录 概述 3 系统目标 3 需求分析 3 功能需求 3 非功能需求 4 设计 4 数据库设计 4 数据库说明 4 数据结构 4 接口设计 5 登录 5 注册.添加信息 6 查询信息 6 查询全部病人 ...
- (转)Element和Node的区别你造吗?
原文:https://blog.csdn.net/kkkkkxiaofei/article/details/52608394 1.写在前面 一个简单的页面: 1 2 3 4 5 6 7 8 9 10 ...
- element 往node里面增加属性值_【Vue原理】Compile - 源码版 之 Parse 属性解析
写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...
- [XML-Jsoup]Jsoup_对象的使用(Jsoup工具类,Document,Elements,Element,Node)
对象的使用: 1. Jsoup:工具类,可以解析html或xml文档,返回Document* parse:解析html或xml文档,返回Document* parse(File in, String ...
- [JS-DOM]核心DOM模型(Document,Element,Node)
核心DOM模型: * Document:文档对象1. 创建(获取):在html dom模型中可以使用window对象来获取1. window.document2. document2. 方法:1. 获 ...
- element 往node里面增加属性值_HashMap加载因子为何0.75,为何初始化值2的指数幂,底层解析...
01 前言 我们在声名HashMap的时候,一般都会这样写. public class MapTest { public static void main(String[] args) { HashM ...
最新文章
- 用eclipse创建WebService Step by Step
- shell判断输入变量或者参数是否为空
- 第07课:动手实战基于 ML 的中文短文本聚类
- 使用SonarCloud对.NET Core项目进行静态代码分析
- 报错,can‘t found the source action, can‘t run the graph[fatal.flow]
- 腾讯否认微信测试语音消息进度调节​;监证会同意蚂蚁集团科创板IPO注册;React 17 正式版发布|极客头条
- 电脑版永恒纪元服务器正在维护,永恒纪元————【维护】1月10日更新维护公告...
- 190723每日一句 学会调整你的心态
- namenode和datanode的功能分别是什么_海德堡印刷机电路板分别是什么功能
- dell 笔记本禁用触摸板方法
- 永凯APS生产排程软件同时考虑物料及产能
- Android实现ListView分页显示
- roslyn生成html,通过Roslyn将字符串生成可以执行的C#代码
- UML 核心元素之参与者
- hdu5294||2015多校联合第一场1007 最短路+最大流
- python爬取招聘网站的选题背景_Python爬虫爬取智联招聘(进阶版)
- Microsoft Visual C++ 14.0 is required.
- HackingLab 脚本关
- 中国大学mooc慕课题库答案怎么查,这里全有了
- SK6# 上海居转户随记