菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
128
0

xml

原创
05/13 14:22
阅读数 97390

一、xml 介绍

1、什么是xml?

xml 是可扩展的标记性语言。

2、xml有什么作用?

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

二、xml语法

1、创建一个xml文件

讲语法前,我们先创建一个简单XML文件,用来描述图书信息。

1.1、我们先在module下创建一个xml目录,用来存xml文件。

1.2、在我们xml目录下就可以创建我们的xml文件了

2、文档声明

<?xml version="1.0" encoding="utf-8" ?>

这里<?xml 要连在一起写,否则会有报错。

属性

version:版本号

encoding:xml 的文件编码

standalone="yes/no":表示这个 xml 文件是否是独立的 xml 文件

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book id="SN123455">
        <name>java思想</name>
        <author>华仔</author>
        <price>9.9</price>
    </book>
    <book id="SN123456">
        <name>九阳神功</name>
        <author>张无忌</author>
        <price>999</price>
    </book>
</books>

3、注释

html 和 xml 一样,

<!--这是一个注释-->

4、元素(标签)

元素是指从开始标签到结束标签的内容。

4.1、命名规则

XML 元素必须遵循以下命名规则:

  1. 名称可以含字母、数字以及其他的字符
  2. 名称不能以数字或者标点符号开始

  1. 名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的)
  2. 名称不能包含空格

4.2、xml 中的元素(标签)也 分成 单标签和双标签

单标签

格式: <标签名 属性=”值” 属性=”值”...... />

双标签

格式:< 标签名 属性=”值” 属性=”值”......>文本数据或子标签</标签名>

5、xml 属性

xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息。

一个标签上可以书写多个属性,每个属性的值必须使用引号引起来。

6、xml 中的特殊字符

7、文本区域(CDATA区)

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

CDATA 格式:

<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml]]>

8、其他需要注意的:

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 文件。

1、dom4j 解析技术(重点*****)

由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包。这里,我直接给出网盘资源:

链接:https://pan.baidu.com/s/1VCNHECAyjARRTLUBFPN55Q
提取码:fy0o

解压后

2、dom4j 目录的介绍

3、dom4j 编程步骤:

第一步: 先加载 xml 文件创建 Document 对象 。

第二步:通过 Document 对象拿到根元素对象 。

第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象。

第四步:找到你想要修改、删除的子元素,进行相应的操作 。

第五步:保存到硬盘上。

4、添加相应的jar包

第一步,在module下,创建一个lib目录,用来存外部jar包。

第二步,导入jar包。(复制黏贴进去)

第三步,选择作用范围,自己选

5、解析xml文件

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

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book id="SN123455">
        <name>java思想</name>
        <author>华仔</author>
        <price>9.9</price>
    </book>
    <book id="SN123456">
        <name>九阳神功</name>
        <author>&lt;张无忌&gt;</author>
        <price>999</price>
    </book>
</books>

解析代码如下,

另外,可以定义一个book类,将获取的book信息丢进去,封装成对象。

public class Dom4jTest {
    @Test
    public void getDocument() throws DocumentException {
        // 要创建一个 Document 对象,需要我们先创建一个 SAXReader 对象
        SAXReader reader = new SAXReader();
        // 这个对象用于读取 xml 文件,然后返回一个 Document。
        Document document = reader.read("xml/book.xml");
        // 打印到控制台,看看是否创建成功
        System.out.println(document);
    }

    @Test
    public void test() throws Exception {
        //1.读取book.xml文件
        SAXReader reader = new SAXReader();
        //在Junit测试中,相对路径是从模块名开始算
        Document document = reader.read("xml/book.xml");

        //2.通过Document对象获取根元素
        Element rootElement = document.getRootElement();

        //3.通过根元素获取book标签对象
        //element()和elements()都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");
        for(Element book : books){
            //asXML() 把标签对象转换为标签字符串
            Element nameElement = book.element("name");
            //getText() 可以获取标签中的文本内容
            String nameText = nameElement.getText();

            //直接获取指点标签名的文本内容
            String priceText = book.elementText("price");
            String authorText = book.elementText("author");

            String snValue = book.attributeValue("SN");

            System.out.println("书名:" + nameText + " , 价格:" + priceText + ", 作者:" + authorText);
        }
    }

}

打印内容:

发表评论

0/200
128 点赞
0 评论
收藏