XML(eXtensible Markup Language)

目录

为什么需要XML?

一 XML语法 

1.文档声明

2.元素

语法:

 3.属性

 4.注释

5.CDATA节

二 树结构

三 转义字符

四 DOM4J

1.XML解析技术

2.dom4j介绍

3.dom4j基本使用


XML 指可扩展标记语言(eXtensible Markup Language)。

XML 被设计用来传输和存储数据,不用于表现和展示数据,HTML 则用来表现数据。

为什么需要XML?

● 解决程序间数据传输的问题:=> 目前多用json替代

比如 qq 之间的数据传送,用 xml 格式来传送数据,具有良好的可读性,可维护性。

● xml 可以做配置文件

xml 文件做配置文件可以说非常的普遍,比如我们的 tomcat 服务器的 server.xml ,web.xml

● xml 可以充当小型的数据库 => 程序自己的数据格式存放

xml 文件做小型数据库,也是不错的选择,我们程序中可能用到的数据,如果放在数据库 中读取不合适(因为你要增加维护数据库工作),可以考虑直接用 xml 来做小型数据库 ,而且 直接读取文件显然要比读取数据库快

一 XML语法 

  • 文档声明
  • 元素
  • 属性
  • 注释
  • CDATA区,特殊字符

1.文档声明

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

XML 声明放在 XML 文档的第一行 , 由以下几个部分组成:

1.version - -文档符合 XML1.0 规范   2.encoding - -文档字符编码,比如"utf-8"

2.元素

<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

语法:

1.每个 XML 文档必须有且只有一个根元素

2.根元素是一个完全包括文档中其他所有元素的元素。

3.根元素的起始标记要放在所有其他元素的起始标记之前。

4.根元素的结束标记要放在所有其他元素的结束标记之后

5.XML 元素指 XML 文件中出现的标签,一个标签分为开始标签和结束标签,一个标签 有如下几种书写形式 包含标签体:www.sohu.cn 不含标签体的:, 简写为: <a/>

6.一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 

元素命名规则:

 区分大小写,例如<p/>,<P/>和是两个不同的标记。

 不能以数字开头。

 不能包含空格。

 名称中间不能包含冒号(:)。

 如果标签单词需要间隔,建议使用下划线 比如 <book_title>h</book_title>

 3.属性

<student id="200">
    <name>mary</name>
    <age>18</age>
    <gender>女</gender>
</student>
  •  属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)
  • 一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值">
  • 特定的属性名称在同一个元素标记中只能出现一次
  • 属性值不能包括& 字符

 4.注释

<!-- 注释 -->
  •  注释内容中不要出现- -
  • 不要把注释放在标记中间
  • 注释不能嵌套
  • 可以在除标记以外的任何地方放注释

5.CDATA节

 有些内容不想让解析引擎执行,而是当作原始内容处理(即当做普通文本),可 以使用 CDATA 包括起来,CDATA 节中的所有字符都会被当作简单文本,而不是 XML 标记

<![CDATA[
这里可以把你输入的字符原样显示,不会解析 xml
]]>
  •  可以输入任意字符(除]]>外)
  • 不能嵌套

二 树结构

XML 文档必须包含根元素。该元素是所有其他元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

所有的元素都可以有子元素:

<bookstore>
    <book category="COOKING">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="CHILDREN">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="WEB">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

三 转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理

四 DOM4J

DOM4J文档

1.XML解析技术

  • 不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析
  • document 对象表示的是整个文档(可以是 html 文档,也可以是 xml)

早期 JDK 为我们提供了两种 xml 解析技术: DOM 和 Sax 

  1. dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己 语言的特点进行实现。 Java 对 dom 技术解析也做了实现
  2. sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML ) SAX 解析,它是以类似事件机制通过回调告诉用户当前正在解析的内容。 是一行一行的读 取 xml 文件进行解析的。不会创建大量的 dom 对象。 所以它在解析 xml时在性能上优于 Dom 解析

第三方的XML解析技术

  1. jdom在dom基础上进行了封装
  2. dom4j又对jdom 进行了封装 ***
  3. pull主要用在Android手机开发,跟sax类似 都是事件机制解析xml文件

2.dom4j介绍

  •  Dom4j 是一个简单、灵活的开放源代码的库(用于解析/处理 XML 文件)。Dom4j 是由早期 开发 JDOM 的人分离出来而后独立开发的。

  •  与 JDOM 不同的是,dom4j 使用接口和抽象基类,虽然 Dom4j 的 API 相对要复杂一些, 但它提供了比 JDOM 更好的灵活性。
  •  Dom4j 是一个非常优秀的 Java XML API,具有性能优异、功能强大和极易使用的特点。 现在很多软件采用的 Dom4j。
  •  使用 Dom4j 开发,需下载 dom4j 相应的 jar 文件

3.dom4j基本使用

    public static void getDocument() throws DocumentException {

        ========================读取========================

        //读取XML文件,获取document对象
        SAXReader reader = new SAXReader();//创建解析器
        Document document1 = reader.read(new File("src\\com\\web\\helloXML.xml"));

        //解析XML形式文本,获取document对象
        String xml="<members></members>";
        Document document2 = DocumentHelper.parseText(xml);

        //主动创建document对象
        Document document3 = DocumentHelper.createDocument();
        Element root = document3.addElement("members");

        ========================遍历=======================

        //1. 得到 rootElement, 你是 OOP
        Element rootElement = document.getRootElement();

        //2. 得到 rootElement 的 student Elements
        List<Element> students = rootElement.elements("student");

        for (Element student : students) {//element 就是 Student 元素/节点
            //获取 Student 元素 的 name Element
            Element name = student.element("name");
            Element age = student.element("age");
            Element resume = student.element("resume");
            Element gender = student.element("gender");

            System.out.println("学生信息= " + name.getText() + " " + age.getText() +
                " " + resume.getText() + " " + gender.getText());
        }

        =======================CRUD=======================
        createELement() addAttribute() add() remove() setText()

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vⅤ_Leon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值