JavaWeb学习第四章——XML

1 篇文章 0 订阅

目录

XML简介

XML语法

文档声明

xml注释

元素(标签)

xml属性

语法规则 

XML解析技术介绍

dom4j解析技术


XML简介

XML是可扩展的标记性语言
XML的作用
1 、用来保存数据,而且这些数据具有自我描述性
2 、它还可以 做为项目或者模块的配置文件
3 、还可以做为网络传输数据的格式(现在 JSON 为主)

XML语法

1. 文档声明
2. 元素(标签)
3. xml 属性
4. xml 注释
5. 文本区域( CDATA 区)

文档声明

我们先创建一个简单XML文件,用来描述图书信息。
1 )创建一个 xml 文件
在idea中创建一个java工程,新建file文件名为book.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!-- xml声明 version是版本的意思 encoding是编码,而且这个<?xml要连在一起写,否则会有报错-->
属性
version                         是版本号
encoding                      是 xml 的文件编码
standalone="yes/no"   表示这个xml文件是否是独立的xml文件
2 )图书有 id 属性表示唯一标识,书名,有作者,价格的信息
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
<books> <!-- 这是 xml 注释 -->
    <book id="SN123123413241"> <!-- book 标签描述一本图书 id 属性描述 的是图书 的编号 -->
        <name>java 编程思想</name> <!-- name 标签描述 的是图书 的信息 -->
        <author>华仔</author> <!-- author 单词是作者的意思 ,描述图书作者 -->
        <price>9.9</price> <!-- price 单词是价格,描述的是图书 的价格 -->
    </book>
    <book id="SN12341235123"> <!-- book 标签描述一本图书 id 属性描述 的是图书 的编号 -->
        <name>葵花宝典</name> <!-- name 标签描述 的是图书 的信息 -->
        <author>班长</author> <!-- author 单词是作者的意思 ,描述图书作者 -->
        <price>5.5</price><!-- price 单词是价格,描述的是图书 的价格 -->
    </book>
</books>

xml注释

html和XML 注释一样 :<!--  xml注释  -->

元素(标签)

html 标签:
格式:<标签名>封装的数据</标签名>
单标签: <标签名 /> <br /> 换行 <hr />水平线
双标签 <标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合 ,html 中不报错。但我们要养成良好的书写习惯。闭合)

1 )什么是 xml 元素

元素是指从开始标签到结束标签的内容。
例如:<title>java编程思想</title>
元素我们可以简单的理解为是标签。
2)XML命名规则
XML元素必须遵循以下命名规则:
2.1)标签名称可以含字母、数字以及其他的字符
2.2) 标签 名称不能以数字或者标点符号开始
2.3)  标签 名称不能包含空格
3 XML 中的元素(标签)也分成单标签和双标签:
单标签 格式: < 标签名 属性 =” 属性 =” ” ...... />
双标签 格式: < 标签名 属性 =” 属性 =” ” ......> 文本数据或子标签 标签名>

xml属性

属性可以提供元素的额外信息

属性必须使用引号引起来,不引会报错示例代码

语法规则 

1)所有XML元素都须有关闭标签(也就是闭合)

2)XML 标签对大小写敏感
3)XML 必须正确地嵌套

4)XML文档必须有根元素    根元素就是顶级元素,没有父标签的元素,叫顶级元素。根元素是没有父标签的顶级元素,而且是唯一一个才行。

5) XML的属性值须加引号

6)XML中的特殊字符 同html <author>&lt;班长&gt;<author>    显示<班长>

7)文本区域(CDATA 区) CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析

CDATA 格式:
<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 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文件。

dom4j解析技术

由于 dom4j 不是 sun 公司的技术,而属于第三方公司,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j的jar包。
dom4j 目录的介绍

1)docs 是文档目录(学习文档),通过docs下的index.html页面,进如quick start快速入门提示
2)lib目录是dom4j需要依赖的其他第三方的类库
3)src是dom4j的码源目录 

dom4j编程步骤
第一步:先加载xml文件创建Document对象
第二步:通过Document对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应的操作
第五步:保存到硬盘上

创建一个 lib 目录,并添加 dom4j jar 包,把jar包添加到类路径。

需要解析的books.xml文件内容 

<?xml version="1.0" encoding="utf-8" ?>
<books> <!-- 这是 xml 注释 -->
    <book id="SN123123413241"> 
        <name>java 编程思想</name> 
        <author>华仔</author> 
        <price>9.9</price> 
    </book>
    <book id="SN12341235123"> 
        <name>葵花宝典</name> 
        <author>班长</author> 
        <price>5.5</price>
    </book>
</books>

解析获取Document对象的代码 

创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document
@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);
}
遍历标签获取所有标签中的内容
    // 第一步,通过创建 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");
    //拿到book标签的sn属性
    String sn = book.attributeValue("sn");
    // 再通过 getText() 方法拿到起始标签和结束标签之间的文本内容
    System.out.println("书名" + nameElement.getText() + " , 价格:"
    + priceElement.getText() + ", 作者:" + authorElement.getText());
    }
}

可以创建book类的对应的JavaBean,通过读取的book.xml内容常见book对象。

new Book(nameElement,priceElement,authorElement)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值