1、XML简介
1.1、什么是xml?
xml是可扩展的标记性语言.
1.2、xml的作用?
1.xml可以用来保存数据,而且数据具有自我描述性 |
2.xml可以作为网络数据的传输格式.(现在一般使用json传输格式) |
3.xml可以作为项目、模块、框架的配置文件使用 |
2、xml语法
2.1、文档声明
1)创建一个xml文件,用来描述图书信息
<?xml version="1.0" encoding="UTF-8"?> xml声明。 <!-- xml声明 version是版本的意思 encoding是编码 --> 而且这个<?xml 要连在一起写,否则会有报错 |
|
属性 |
表示含义 |
version |
版本号 |
encoding |
xml的文件编码 |
2)图书有id属性 表示唯一 标识,书名,有作者,价格的信息
<?xml version="1.0" encoding="UTF-8" ?> <!-- <?xml version="1.0" encoding="UTF-8" ?> 这是xml的声明,表示是一个xml文件,同时还设置 xml的一些属性 version="1.0" 版本 encoding="UTF-8" 字符集 --> <books><!-- books标签它没有父元素我们管它叫根元素,根元素是顶级元素,没有父元素的标签.而且只有一个 --> <book sn="SN12341234123"> <!--book表示一个图书信息 sn属性表示图书出版号--> <name>菜花宝典</name> <!-- name标签表示书名 --> <author>飞哥</author> <!--author表示作者--> <price>9.9</price> <!--price标签表示价格--> </book> <book sn="SN12341234121"> <!--book表示一个图书信息 sn属性表示图书出版号--> <name>怒第三方</name> <!-- name标签表示书名 --> <author>凧解</author> <!--author表示作者--> <price>9999</price> <!--price标签表示价格--> </book> <book sn="SN12341234122"> <!--book表示一个图书信息 sn属性表示图书出版号--> <name>让他</name> <!-- name标签表示书名 --> <author>好好</author> <!--author表示作者--> <price>9999</price> <!--price标签表示价格--> </book> </books>
3)在浏览器中可以查看到文档
2.2、xml注释
html 和 XML 注释 一样 : <!--注释-->
2.3、元素(标签)
html标签: 格式:<标签名>封装的数据</标签名> 单标签: <标签名 /> <br /> 换行 <hr />水平线 双标签 <标签名>封装的数据</标签名> 标签名大小写不敏感 标签有属性,有基本属性和事件属性 标签要闭合(不闭合 ,html中不报错。但我们要养成良好的书写习惯。闭合) |
1) 什么是xml元素
元素是指从开始标签到结束标签的内容。 例如:<title>java </title> 元素 可以简单的理解为是 标签。 Element 翻译 元素 |
2)XML 命名规则
XML 元素必须遵循以下命名规则:
2.1)名称可以含字母、数字以及其他的字符
例如: <book id="SN213412341"> <!-- 描述一本书 --> <author>ABC</author> <!-- 描述书的作者信息 --> <name>java </name> <!-- 书名 --> <price>9</price> <!-- 价格 --> </book> |
2.2)名称不能以数字或者标点符号开始
2.3)名称不能包含空格
2.4) xml中的元素(标签)也 分成 单标签和双标签:
单标签 |
格式: <标签名 属性=”值” 属性=”值” ...... /> |
双标签 |
格式:< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名> |
2.4、xml属性
xml的标签属性和html 的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
1.一个标签上可以书写多个属性。每个属性的值必须使用引号引起来。
2.规则和标签的书写规则一致。
3. 属性必须使用引号引起来,不引会报错示例代码
2.5、语法规则:
1)所有 XML 元素都须有关闭标签(也就是闭合)
2)XML 标签对大小写敏感
3)XML 必须正确地嵌套
4)XML 文档必须有根元素
5)XML 的属性值须加引号
6)XML中的特殊字符
7)文本区域(CDATA区)
CDATA区语法可以告诉xml解析器,我这里的内容只是纯文本.它不是语法组成 CDATA 格式: <![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml ]]> |
3、xml解析技术介绍
xml可扩展的标记语言。
不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
document对象表示的是整个文档(可以是html文档,也可以是xml文档)
早期JDK提供了两种xml解析技术Dom和Sax简介(已经过时)
dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java对dom技术解析标记也做了实现。
sun公司在JDK5版本对 dom解析技术进行升级:SAX( Simple API for XML )
SAX解析,它跟W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
它是一行一行的读取xml文件进行解析的。不会创建大量的dom对象。
所以它在解析xml的时候,在内存的使用上。和性能上。都优于Dom解析。
第三方的解析: jdom 在dom基础上进行了封装 、 dom4j又对jdom 进行了封装。 pull 主要用在Android 手机开发,是在跟sax非常类似都是事件机制解析xml文件。 这个Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件。 |
4、dom4j解析技术
由于dom4j 不是sun公司的技术,而属于第三方公司的技术,使用dom4j 需要到dom4j官网下载dom4j的jar包。
4.1、Dom4j 类库的使用
1)下载dom4j-1.6.1.jar包
2)拷贝jar包到模块下创建的lib目录下
3)把jar包添加到模块依赖中(类路径)
4)添加成功之后jar包的前面会有一个角标
4.2、dom4j 目录的介绍:
1)docs 是 文 档 目 录
2)如何查看Dom4j 的文档
1.找到dom4j的包目录
2.找到docs目录
3.找到index.html文件双击打开
3)Dom4j 快速入门
Quick Start是快速入门举例,可以帮助我们快速了解Dom4j
4)lib 目录
lib目录它是dom4j需要依赖其他第三方类库
5)src 目录是第三方类库的源码目录
4.3、dom4j 编程步骤:
第一步: 先加载xml文件创建Document对象 第二步:通过Document对象拿到根元素对象 第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象 第四步:找到你想要修改、删除的子元素,进行相应在的操作 第五步,保存到硬盘上 |
4.4、获取document对象
需要解析的books.xml文件内容
<?xml version="1.0" encoding="UTF-8"?> <books> <book sn="SN12341232"> <name>在吧吧</name> <price>9.9</price> <author>aaa</author> </book> <book sn="SN12341231"> <name>通天塔</name> <price>99.99</price> <author>特别</author> </book> </books>
解析获取Document对象的代码
第一步,先创建SaxReader对象。这个对象,用于读取xml文件,并创建Document
/* * dom4j 获取Documet对象 */ @Test public void getDocument() throws DocumentException { // 要创建一个Document对象,需要我们先创建一个SAXReader对象 SAXReader reader = new SAXReader(); // 这个对象用于读取xml文件,然后返回一个Document。 Document document = reader.read("src/books.xml"); // 打印到控制台,看看是否创建成功 System.out.println(document); }
4.5、遍历标签获取所有标签中的内容
需要分四步操作: 第一步:通过创建SAXReader对象。来读取xml文件,获取Document对象 第二步:通过Document对象。拿到XML的根元素对象 第三步:通过根元素对象。获取所有的book 标签对象 第四步:遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容 |
/* * 读取xml文件中的内容 */ @Test public void readXML() throws DocumentException { // 需要分四步操作: // 第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象 // 第二步,通过Document对象。拿到XML的根元素对象 // 第三步,通过根元素对象。获取所有的book 标签对象 // 第四小,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容 // 第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象 SAXReader reader = new SAXReader(); Document document = reader.read("src/books.xml"); // 第二步,通过Document对象。拿到XML的根元素对象 Element root = document.getRootElement(); // 打印测试 // Element.asXML() 它将当前元素转换成为String对象 // System.out.println( root.asXML() ); // 第三步,通过根元素对象。获取所有的book 标签对象 // Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合 List<Element> books = root.elements("book"); // 第四小,遍历每个book标签对象。然后获取到book标签对象内的每一个元素, for (Element book : books) { // 测试 // System.out.println(book.asXML()); // 拿到book下面的name元素对象 Element nameElement = book.element("name"); // 拿到book下面的price元素对象 Element priceElement = book.element("price"); // 拿到book下面的author元素对象 Element authorElement = book.element("author"); // 再通过getText() 方法拿到起始标签和结束标签之间的文本内容 System.out.println("书名" + nameElement.getText() + " , 价格:" + priceElement.getText() + ", 作者:" + authorElement.getText()); } }