【简述】

Xml文件出了给开发者看,更多情况使用程序读取xml文件里的内容,这叫做xml解析。

根据解析方式分为:DOM解析 和 SAX解析

【解析工具】

(一). 使用DOM解析原理的工具:

  1.JAXP(Oracle-Sun公司官方)

  2.JDOM工具(非官方)

  3.Dom4J工具(非官方,使用者最多,也是SSH三大框架默认读取xml的工具)

(二). 使用SAX解析原理的工具:

   1.SAX官方解析工具(Oracle-Sun官方)

  ....

【什么是DOM解析】

  DOM解析原理:Xml解析器一次性把整个Xml文档加载进内存,然后在内存中构建一个Document对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到Xml文档的内容。

【使用dom4j读取xml文件】

【工程截图】

【提示】

【person.xml】

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="88888" phone="15888888888" sex="男">
<name>张三</name>
<age>18</age>
<school>HDU</school>
</student>
<student>
<name>李四</name>
<age>28</age>
<school>ZKU</school>
</student>
<AAAA>
<aa1>aa111</aa1>
<aa2>aa222</aa2>
</AAAA>
<BBBB></BBBB>
</students>

【1.读取节点信息】

@Test
public void testNode() throws DocumentException{
//1.读取XMl文件,返回一个Document对象
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(new File("./src/person.xml")); //nodeIterator:得到当前节点的下的所有子节点对象(不会遍历孙节点及以下节点)
Iterator<Node> it=doc.nodeIterator();
while(it.hasNext()){ //判断是否还有下一个元素
Node node=it.next(); //取出元素
System.out.println(node.getName()); //得到节点的名称
//System.out.println("-------"); /*
* 继续取出当前节点的子节点
* 只有标签节点Element才有子节点
* 判断当前节点是否是标签节点
*/
if(node instanceof Element){
Element elem=(Element) node;
Iterator<Node> it2=elem.nodeIterator();
while(it2.hasNext()){
Node node2=it2.next();
System.out.println(node2.getName());
System.out.println("--------");
}
} }
}

【1.运行结果】

【2.遍历获取Xml文档的所有标签】

【2.1公用方法: 递归获取传入标签下的所有子节点】

    /**
* 【公用方法】获取传入标签下的所有子节点
*/
private void getChildNodes(Element elem){
System.out.println(elem.getName());
//得到子节点
Iterator<Node> it=elem.nodeIterator();
while(it.hasNext()){
Node node=it.next();
//判断是否是标签节点
if(node instanceof Element){
Element el=(Element) node;
//递归
getChildNodes(el);
}
}
}

【2.2 testAllNode:遍历获取Xml文档的所有标签】

    /**
* 遍历获取Xml文档的所有标签
*/
@Test
public void testAllNode() throws DocumentException{
//读取Xml文件,返回Document对象
SAXReader saxReader =new SAXReader();
Document doc=saxReader.read(new File("./src/person.xml")); //得到根标签节点 在一个xml文档中,有且仅有一个根标签
Element roorElem=doc.getRootElement();
getChildNodes(roorElem);
}

【2.运行结果】

【3.获取标签名】

    /**
* 获取标签名
*/
@Test
public void testElements() throws DocumentException{
//读取xml文档,返回一个Document对象
SAXReader saxReader =new SAXReader();
Document doc=saxReader.read(new File("./src/person.xml")); //得到根标签
Element rootElem=doc.getRootElement();
//得到根标签名称
String name=rootElem.getName();
System.out.println("根标签名称:"+name); System.out.println("\n=====1.得到当前标签下指定名称的第一个子标签====");
//得到当前标签下指定名称的第一个子标签
Element firstElem=rootElem.element("student");
System.out.println("studnets下的第一个子标签名称:"+firstElem.getName()); System.out.println("\n=====2.得到当前标签下的*指定名称*的所有子标签====");
//得到当前标签下的指定名称的所有子标签
Iterator<Element> it=rootElem.elementIterator("student");
while(it.hasNext()){
Element elem=it.next();
System.out.println("while循环下:"+elem.getName());
} System.out.println("\n=====3.得到当前标签下的所有子标签====");
//得到当前标签下的所有子标签
List<Element> list=rootElem.elements();
//遍历list
for(Element e:list){
System.out.println("遍历的list结果:"+e.getName());
} //获取更深层次的标签(方法只能一层层的获取)
Element nameElem=doc.getRootElement().element("student").element("name");
System.out.println(nameElem.getName()); //打印的标签名
}

【3.运行结果】

【4.获取属性值】

    /**
* 获取属性值
*/
@Test
public void testGetValue() throws DocumentException{
//1.读取xml文档,返回Document对象
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(new File("./src/person.xml")); /**获取属性:(先获得属性所在的标签对象,然后才能获取属性)**/
//1.得到指定名称的标签对象
Element contactElem=doc.getRootElement().element("student"); //2.得到属性
//2.1得到指定名称的属性值
String idValue=contactElem.attributeValue("id");
System.out.println("指定名为'id'的属性值:"+idValue); //2.2得到指定属性名称的属性对象
Attribute idAttr=contactElem.attribute("id");
//getName:属性名称 getValue:属性值
System.out.println("属性名称:"+idAttr.getName()+" === 属性值:"+idAttr.getValue()); //2.3 得到所有属性对象,返回List集合
List<Attribute> list=contactElem.attributes();
//遍历属性
for(Attribute attr:list){
System.out.println("【遍历List】属性名称:"+attr.getName()+" === 属性值:"+attr.getValue());
}
//2.3得到所有属性对象,返回迭代器Iterator
Iterator<Attribute> it=contactElem.attributeIterator();
while(it.hasNext()){
Attribute attr=it.next();
System.out.println("【遍历迭代器】属性名称:"+attr.getName()+" === 属性值:"+attr.getValue());
}
}

【4.运行结果】

【5.获取标签体内容(文本)】

    /**
* 获取文本
*/
@Test
public void testGetText() throws DocumentException{
//读取Xml文档,返回Document对象
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(new File("./src/person.xml")); /**
* 注意:空格和换行也是xml的文本内容
*/
String contact=doc.getRootElement().getText(); //获取根节点的文本内容
System.out.println("=======根节点文本内容======");
System.out.println(contact);
System.out.println("========================\n"); //获取文本值方式一(先获取标签,再获取标签上的文本)
Element nameElem =doc.getRootElement().element("student").element("name"); //获取学生姓名
System.out.println("获取的<name>内的文本:"+nameElem.getText()); //方式二
String ageText=doc.getRootElement().element("student").elementText("age");
System.out.println("获取的<age>内的文本:"+ageText); }

【5.运行结果】

【小结】

1.获取节点对象 Node

2.获取标签 Element

3.获取属性

4.获取文本

05_XML的解析_01_dom4j 解析的更多相关文章

  1. 08_XML的解析_SAX解析

    [对比SAX解析和DOM解析] * 在使用DOM解析XMl文档时,需要读取整个XML文档,在内存中架构代表整个DOM树的DOcument对象,从而对XML文档进行操作,在这种情况下,如果XML文档特别 ...

  2. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  3. JavaScript使用浏览器内置XML解析器解析DOM对象

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...

  4. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html> <body> <script type="t ...

  5. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  6. 爬虫的三种解析方式(正则解析, xpath解析, bs4解析)

    一 : 正则解析 : 常用正则回顾: 单字符: . : 除换行符以外的所有字符 [] : [aoe] [a-w] 匹配集合中任意一个字符 \d : 数字 [0-9] \D : 非数字 \w : 非数字 ...

  7. XML 解析---dom解析和sax解析

    眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...

  8. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

  9. XML解析——SAX解析以及更方便的解析工具(JDOM、DOM4J)

    XML主要用于数据交换,HTML则用于显示. 相对于DOM的树形解析,SAX采用的是顺序解析,这种解析方法可以快速地读取XML数据的方式. SAX主要事件: No. 方法 类型 描述 1 public ...

随机推荐

  1. 如何让Iconfont作用到content伪类中

    沿用同行思密达的方法整理了一下;前提是先引入iconfont字体图标(引用线上iconfont查看上篇随笔):比如 其中&#是开头用以标明这是字符实体,x表示这是十六进制,而CSS的cont ...

  2. Emgu CV 高斯建模

    Codeprivate void button1_Click(object sender, EventArgs e) { Emgu.CV.Capture cap = new Capture(" ...

  3. [C语言(VC)] 打造自己的键盘记录器 (zaroty)

    说起键盘记录,想必很多朋友都用过网上流传的一些键盘记录软件吧,但是有没有想过自己写一个呢?也许你会想:会不会很复杂啊?我可以很负责的告诉你,写键盘记录是很简单的.你所需要的仅仅是懂得一些C语言的DLL ...

  4. UITableView实现格瓦拉飞天投票模块

    格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块.其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次 ...

  5. [设计模式1]--单例模式(SINGLETON)

    搞笑解释: 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我 定义: 单例模式确保某一个类只有一个实例,而且自行实例化并向整 ...

  6. 如何安装SQL Server 2008数据库(带完整图解)

    在电脑上安装SQL Server 2008 软件时,经常会遇到各种各样的问题,如何成功的安装SQL Server 2008呢?提供完整过程和图片详解. 工具/原料 电脑一台 软件:sql server ...

  7. highcharts js报表工具(报表插件)

    highcharts报表工具(报表插件.图表工具) highcharts效果在线演示(可查看源代码):  http://www.hcharts.cn/demo/index.php?p=56 Highc ...

  8. Mantis 安装与配置

    1. 适用范围 a. 本文介绍基于 Windows 下的缺陷管理平台 Mantis. 2. 软件准备 a. 下载 EasyPHP:http://www.easyphp.org/easyphp-devs ...

  9. Internationalization

    Internationalization If you are building a site for an international audience, you will likely want ...

  10. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...