xml 的使用和解析 及解析工具
xml
一、xml简介
1. 什么是xml
XML:Extensiable Markup Language,可扩展标记语言。和HTML有语法相似之处,也有作用上的不同:
和html相似:
都是由一堆标签组成的
标签上都可以写属性
和html不同:
html重点在于显示;xml重点在于配置的数据
html的标签都是有功能;xml的标签没有功能
html的标签是w3预定义好的;xml的标签是自定义的
2. xml的作用
作为软件的配置文件:逐步被注解代替掉,但是没有完全代替掉
properties文件:简单,功能弱。JDK提供的Properties来解析
xml文件:麻烦,功能强。引入jar包解析
作为数据传输的格式:已经被json代替了
二、==xml语法==(编写一个xml)
1. xml的语法概述
一个xml里,用到的语法有:
文档声明
注释
元素/标签
属性
特殊字符和CDATA区
2. xml的语法详解
要求:编写一个xml,里边配置班级里同学的信息
2.1 文档声明
<?xml version="1.0" encoding="utf-8" ?>
注意:
文档声明必须出现在xml文档的0行0列
2.2 元素/标签
<!-- 开始标签,结束标签 -->
<students></students>
<!-- 自闭合标签 -->
<studetns/>
注意:
区分大小写
命名要求:不能使用空格、冒号,不建议以xml开头
建议:以数字、字母、下划线命名,并且不以数字开头
只能有且必须有一个根标签
标签一定要闭合
2.3 属性
<student id="001"></student>
注意:
属性必须出现在开始标签上
属性值必须使用引号括起来
区分大小写
属性命名:建议以数字、字母、下划线命名,不以数字开头
2.4 特殊字符和CDATA区
特殊字符:通常使用转义字符代替:
>, >
<, <
", "
', ''
&, &
CDATA区:在CDATA区里可以写任意字符,而不需要使用转义字符。
语法:
<![CDATA[ 在这里可以写任意内容 ]]>
3. xml编写的练习:
要求:编写一个xml,配置一些书籍的信息。每本书要求有:书名,作者,价格;编号,出版社
三、xml解析
1. 什么是xml解析
使用一段代码,读取xml,得到里边配置的数据。
2. 有哪些解析方式(面试题)
2.1 常见的解析方式
DOM解析:把整个xml文档加载到内存中,封装形成一棵dom树。
优点:可以增、删、改
缺点:可能内存溢出
SAX解析:逐行读取,事件驱动型解析。
优点:速度快,可以读取大xml文档
缺点:复杂,不能增、删、改
2.2 常见的解析工具包
jaxp:sun公司的工具包,很少用
jsoup:可以解析xml,但是更多用于解析html,做网络爬虫
jdom:jdom组织提供的工具包
dom4j:dom4j组织提供的工具包,使用的多
3. xml解析实现
3.1 使用dom4j解析xml
3.1.1 基本步骤
1.读取xml,得到Document对象
2.从Document里得到根节点对象
3.遍历dom树,找需要的标签
4.得到标签上的数据:属性值、标签体
3.1.2 相关的类
解析器:读取xml的,得到Document对象
SAXReader:使用sax方式读取xml,最终构建一棵dom树
DOMReader:使用dom方式读取xml,最终构建一棵dom树
SAXReader reader = new SAXReader();
Document document = reader.read(InputStream is);
从Document里得到根标签:
document.getRootElement()
从任意一标签里得到子标签
element.elements()
:获取所有的子标签,得到Listelement.elements(String elementName)
:获取所有指定名称的子标签,得到Listelement.element(String elementName)
:获取第一个指定名称的子标签,得到Element
从标签上得到数据:
element.getText()
:得到标签里的内容element.attributeValues(String attrName)
:获取指定名称的属性值
3.2 使用xpath简化dom4j
3.2.1 常见xpath写法(了解)
/a/b/c: 找根标签a下的b标签,b标签下的c标签。 最终找的是符合条件的c标签
//a: 全文搜索a标签
//a[1]: 全文搜索a标签,只要第1个
//a[last()]:全文搜索a标签,只要最后一个
//@id: 全文搜索id属性
//a[@id]:全文搜索含有id属性的a标签
//a[@id="a1"]:全文搜索a标签,但是只要id属性值为a1的
/a/*: 找根标签a下所有的子标签
//*: 全文搜索所有标签
//a[@*] 全文搜索有属性的a标签
3.2.2 dom4j使用xpath
步骤:导入jar包(dom4j的jar包,jaxen的jar包)
1. 读取xml文件,得到Document对象
2. 使用Document的方法,执行xpath表达式,得到结果
相关的方法:
Document里执行xpath的方法:
document.selectNodes(String xpath)
:得到所有符合xpath的节点集合,得到List<Node>
document.selectSingleNode(String xpath)
:得到第一个符合xpath的节点对象,得到Node对象
3.3 dom4j解析和xpath解析对比
如果要解析xml,得到里边配置的所有数据:建议用dom4j,层层迭代遍历所有
如果要解析xml,只要里边的一部分数据:建议使用xpath,使用xpath表达式直接定位到节点,不需要层层迭代
4. 练习:
解析得到书籍xml文件里所有的书籍信息
使用xpath解析xml,得到所有书籍的名称。 或者是得到id为指定值的一本书的信息
四、xml约束(了解)
1. 什么是约束
用来限制xml文件里可以写什么标签、属性、什么值。这样的限制,叫xml约束。
约束的作用:
限制xml里可以写什么,不可以写什么
编写xml时给代码提示
2. 有哪些约束(面试题)
DTD约束:
文件后缀名是:.dtd
DTD约束是一套独立的语法
DTD的数据类型较少
Schema约束:
文件后缀名是:xsd
Schema约束是使用xml格式编写的
Schema支持更多的数据类型
Schema支持名称空间
3. 约束的引入(了解)
3.1 在xml里引入dtd约束
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE 根标签 SYSTEM "dtd文件名称">
3.2 在xml里引入Schema约束
<?xml version="1.0" encoding="utf-8"?>
<根标签
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="约束文件的名称空间"
xsi:schemaLocation="约束文件的名称空间 xsd文件名称">
</根标签>
如果一个xml里要引入多个xsd约束
<?xml version="1.0" encoding="utf-8" ?>
<根标签 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="约束1的名称空间"
xmlns:ys2="约束2的名称空间"
xmlns:ys3="约束3的名称空间"
xsi:schemaLocation="约束1的名称空间
约束1的文件位置
约束2的名称空间
约束2的文件位置
约束3的名称空间
约束3的文件位置">
<!-- abc标签是默认的名称空间里提供的标签。xmlns="" -->
<abc></abc>
<!-- 约束2里的标签 -->
<ys2:abc></ys2:abc>
<!-- 约束3里的标签 -->
<ys3:abc></ys3:abc>
</根标签>
4. 名称空间
Schema约束里有名称空间;DTD约束是没有的
作用:
因为一个xml里可以引多个Schema约束。多个Schema约束里可能定义的相同名称的标签。
在xml里,使用标签时,就必须要声明:用的是哪个约束里的标签定义
名称空间相当于是一个Schema约束的唯一标识。
内容总结
能够说出xml的作用:
作为软件的配置文件:逐步被注解代替了
作为数据传输的格式:已经被json代替了
掌握xml的语法:区分大小写
文档声明:
<?xml version="1.0" encoding="utf-8" ?>
要求:必须出现在0行0列
注释:
<!-- 注释内容 -->
元素/标签:
<关键字></关键字>
<关键字/>
有且必须有一个根标签
命名:不能出现空格,冒号;不建议以xml开头;建议:以字母、数字、下划线命名,不以数字开头
属性:
<关键字 属性名="值" 属性名="值"></关键字>
属性值必须用引号括起来
命名:跟元素命名规范一样
特殊字符:
>, > <, < "," ',' &, &
CDATA区:
<![CDATA[ 在这里可以写任意内容 ]]>
能够说出常用的解析方式:
dom解析:把整个xml加载到内存中,形成dom树。
好处:可以增、删、改
缺点:可能内存溢出
sax解析:逐行读取,事件驱动型解析。
好处:速度快,不易内存溢出
缺点:不能增、删、改
掌握 dom4j解析xml的方式
//1.读取xml,得到Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(xml文件的输入流对象);
//2.从Document里得到根标签
Element rootElement = document.getRootElement();
//3.层层遍历得到想要的标签
List<Element> elements = rootElement.elements();//得到所有子标签
List<Element> elements = rootElement.elements("student");//获取所有名称为student的子标签
Element element = rootElement.element("student");//获取第一个名称为student的子标签
//4.获取标签上的数据:属性值, 文本
String attrValue = element.attributeValue(String attrName);
String text = element.getText();掌握xpath简化dom的使用
//1.读取xml,得到Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(xml文件的输入流对象);
//2.使用Document的方法,执行xpath表达式,得到结果
List<Node> nodes = document.selectNodes(String xpath);//得到所有符合条件的节点集合
Node node = document.selectSingleNode(String xpath);//得到第一个符合条件的节点对象能够说出xml的两种约束方式
DTD约束; Schema约束
DTD约束有独立的语法;Schema约束使用的xml语法
Schema支持更多的数据类型
一个xml里只能引入一个dtd约束;能引入多个Schema约束
Schema约束支持名称空间
把引入约束的语法,记起来备用
xml 的使用和解析 及解析工具的更多相关文章
- XML解析——SAX解析以及更方便的解析工具(JDOM、DOM4J)
XML主要用于数据交换,HTML则用于显示. 相对于DOM的树形解析,SAX采用的是顺序解析,这种解析方法可以快速地读取XML数据的方式. SAX主要事件: No. 方法 类型 描述 1 public ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- 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来 ...
- (转)Unity3D研究院之将场景导出XML或JSON或二进制并且解析还原场景
自:http://www.xuanyusong.com/archives/1919 导出Unity场景的所有游戏对象信息,一种是XML一种是JSON.本篇文章我们把游戏场景中游戏对象的.旋转.缩放.平 ...
- XML - 十分钟了解XML结构以及DOM和SAX解析方式
引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶, ...
- 将场景导出XML或JSON或二进制而且解析还原场景
导出unity场景的全部游戏对象信息,一种是XML一种是JSON. 本篇文章我们把游戏场景中游戏对象的.旋转.缩放.平移与Prefab的名称导出在XML与JSON中.然后解析刚刚导出的XML或JSON ...
- XML解析——DOM解析
XML:可扩展性标记语言,主要用来传输和存储数据,相对于HTML的各种标签规范,XML的标签可以让用户根据语义自己进行定义,适用于web传输. JSON和XML的区别: (1).XML定义 扩展标记语 ...
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML ...
- XML文件解析DOM解析和SAX解析
解析一个XML文档有哪些内容解析有:dom和sax两种dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会 ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...
随机推荐
- 第二章 python基础(二)
第九节 函数 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字. 可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句. ...
- 201621123014《Java程序设计》第四周学习总结
1.本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:继承.多态.子类.父类.final.static.类型判断与类型转换.抽象类. 1.2 尝试使用思维导图将这些关键词组织起来. ...
- 3_observer
#Observer 成就系统 achievements system 玩家完成某种成就后,通知监督者,监督者做出相应出来 ``` //简单来说就是事件触发的时候, 通知监督者 class Observ ...
- linux命令学习笔记(0):man命令
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可. Linux的man手册共有以下几个章节: 代號 代表內容 使用者在shell中可以操作的指令或可执行 ...
- Java进阶06 容器
Java中有一些对象被称为容器(container).容器中可以包含多个对象,每个对象称为容器中的一个元素.容器是用对象封装的数据结构(data structure). 充满梦想的容器 不同的数据结构 ...
- C++11 右值引用 与 转移语义
新特性的目的 右值引用(R-value Reference)是C++新标准(C++11, 11代表2011年)中引入的新特性,它实现了转移语义(Move Semantics)和精确传递(Perfect ...
- hdu2196 Computer待续
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #i ...
- ie11
可用:document.documentMode来检测. var isIE11 = function() { var result = false; if (document.documentMode ...
- Spring之2:Spring Bean动态注册、删除
IoC容器的初始化包括BeanDefinition的Resource定位.载入和注册这三个基本的过程. 一.Resource定位.BeanDefinition的资源定位有resourceLoader通 ...
- 人物-IT-雷军:雷军
ylbtech-人物-IT-雷军:雷军 雷军 (全国工商联副主席,小米科技创始人.董事长) 雷军,1969年12月16日出生于湖北仙桃,毕业于武汉大学,是中国大陆著名天使投资人. 雷军作为中国互联网 ...