XML

1.1XML是什么

XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。

可扩展 – 随便写

标记 – 标签

它被设计的宗旨描述数据,而非显示数据。

XML标签没有被预定义,需要用户自行定义标签。

XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。http://www.w3school.com.cn/

XML被广泛认为是继Java之后在Internet上最激动人心的新技术。

1.2XML有什么作用?

XML被设计用来传输和存储数据。
很遗憾的是,随着语言的不断进步,XML传输以及存储的功能正在逐步弱化,只有在一些极为古老的项目中还存在使用xml来传输数据.

当前XML主要是用来作为配置文件使用!!!

书写XML

XML可以被解析

XML的两种约束是什么

1.3为什么要学习XML

学习到的tomcat,maven,spring等等都需要使用XML作为配置文件!

所以我们要对XML有一定的了解!!!

xml - 可扩展的的标记语言

来自哪里 – W3C组织 万维网联盟

什么作用 – 存储数据传输(已经被淘汰)

为什么要学习xml – 作为配置文件使用!!!

1.4开始学习XML

xml语言是具有结构性的标记语言, 可以灵活的存储一对多的数据关系.

<中国>
<省 name="北京">
<市>海淀</市>
<市>丰台</市>
</省>
<省 name="山东">
<市>济南</市>
<市>青岛</市>
</省>
<省 name="湖北">
<市>武汉</市>
<市>荆州</市>
</省>
</中国>

以上这种数据, 如果通过我们学习的集合来存储的话, 需要通过多个集合的嵌套使用.

那么很显然, 数据存储的过程就非常麻烦, 但是我们今天所学习的xml文件就可以很简单的存储这种一对多的数据

xml是怎样存储数据的?

**答:以标签的形式存储 **

tom

1.5XML的组成

文档声明

注释

元素

元素的属性

1.5.1文档声明

什么是文档声明?

​ 在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行

​ 这就好比我们在eclipse中写java文件的 package com.SiyualChen.test; 一样,只能放在文件的第一行。 就是个硬性的规定.

文档声明

<?xml version='1.0' encoding='UTF-8'?>
	xml表示标签的名字
	version表示当前文件的版本号
	encoding表示当前编码, 需要跟文件的编码产生对应关系

1.5.2注释

<!--我是注释-->

1.5.3元素

  1. xml中的元素其实就是一个个的标签

  2. 每一个xml中有且只有一个跟标签,标签可以嵌套标签

  3. 标签分为两种

​ a: 包含标签体
​ 理解: 简括号全部成对儿出现, 所有的数据都用一对儿简括号存储
​ 例:

<name>zhangsan</name>
<age>18</age>

​ b: 不包含标签体
​ 理解: 只有最外层的一个简括号,括号用/标识结束, 内部的数据都用属性来编写

 <student />
  1. 注意事项

严格区分大小写
只能以字母或下划线开头;abc _abc
不能以xml(或XML、Xml等)开头----W3C保留日后使用;
名称字符之间不能有空格或制表符;
名称字符之间不能使用冒号 : (有特殊用途)
一个XML文件中有且仅有一个根元素
属性名称的命名规范与元素的命名规范相同

1.5.3属性

<student name='张三'></student>
<student name='张三'/>

属性由属性名与属性值组合

属性值 必须使用单引号或者双引号包裹起来!!!

1.5.4XML练习

<?xml version="1.0" encoding="UTF-8" ?>
<!--
 斗破苍穹  缥缈之旅   诛仙	鬼吹灯   神墓
 天蚕土豆  萧潜	  萧鼎	天下霸唱	辰东
   ¥86	  ¥92	 ¥98  ¥124   ¥128
 -->
<books>
    <book author ="天蚕土豆">
        <name>斗破苍穹</name>
        <price>86</price>

    </book>
    <book author ="萧潜">
        <name>缥缈之旅</name>
        <price>92</price>

    </book>
    <book author ="萧鼎">
        <name>诛仙</name>
        <price>98</price>

    </book>
    <book author ="天下霸唱">
        <name>鬼吹灯</name>
        <price>124</price>

    </book>
    <book author ="辰东">
        <name>神墓</name>
        <price>128</price>

    </book>



</books>

xml中学生对数据的存储

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<student>
    <student>
        <name>ChenCHen</name>
        <age>18</age>
    </student>
    <student name ="SiSi" age = "20"/>
    <student name ="YuanYuan">
        <age> 40</age>
    </student>
</student>

在xml中的尖括号有自己的特殊含义,如果想要做一些使用的话怎么办?
&lt ; 小于
&gt ; 大于
&amp ; 和 &
&apos ; 单引号
&quot ; 双引号

1.6XML解析

常见的XML解析方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
XML解析开发包
JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用。)

Dom4J – 作用 解析XML 谷歌组织开源的大赛上 xml解析 名列前茅

Dom4J – dom for java – Dom4J

Log4J

1.6.1Dom4J解析

链接 : https://dom4j.github.io/

github – 被微软收购了 全球最大的IT交流网站 – git

CSDN – 国内的IT技术交流网站

如果需要使用dom4j,必须导入jar包。

1.在项目根目录下创建一个叫lib的文件夹,将jar包复制进去
2.在jar包上点击右键,选择Add as Library… 点击
Dom4J的常用方法:

SAXReader 对象 xml文件读取器

Document read(String path);加载执行xml文档

Document 对象

Element getRootElement() :获取根元素对象(根标签)

Element 对象

List elements() :获取所有的子元素

List elements(String name):根据指定的元素名称来获取相应的所有的子元素

Element element(String name):根据指定的元素名称来获取子元素对象,如果元素名称重复,则获取第一个元素 

String	elementText(String name) :根据指定的子元素名称,来获取子元素中的文本

String	getText():获取当前元素对象的文本

String	attributeValue(String name):根据指定的属性名称获取其对应的值

二.XML约束()

3.1为什么要有约束 (DTD)?

xml可扩展的标记语言 – 开发者来讲 xml随便写 – xml格式 --造成 第三方的一些框架 没有办法解析

约束作用:约束xml书写的格式!!!— xml只能按照约束去写 那么最终写出来的格式是一个固定的格式!!!

(DTD简介)

XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)

XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束

说明 : 开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。

3.2如何使用DTD约束文件?

3.2.1语法细节

在DTD文档中使用ELEMENT关键字来声明一个XML元素。

• 语法:<!ELEMENT 元素名称 使用规则>

使用规则:

• (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

• EMPTY:用于指示元素的主体为空。比如<br/>

• ANY:用于指示元素的主体内容为任意类型。

• (子元素):指示元素中包含的子元素

• 定义子元素及描述它们的关系:

​ – 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。

• 如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)

​ – 如果子元素用"|"分开,说明任选其一。

• 如:`<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)`

​ –用+、*、?来表示元素出现的次数

• 如果元素后面没有+*?:表示必须且只能出现一次
• +:表示至少出现一次,一次或多次
• *:表示可有可无,零次、一次或多次
• ?:表示可以有也可以无,有的话只能有一次。零次或一次
3.2.2XML文件内部引用DTD约束
3.2.3内部DTD
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE 根元素名 [
	... //具体的语法
]>
<?xml version="1.0" encoding="UTF-8" ?>
<!--内部 DTD 约束-->
<!DOCTYPE books[
        <!ELEMENT books (book+)>
        <!ELEMENT book (name, price)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT price (#PCDATA)>
        <!ATTLIST book author CDATA #REQUIRED>
        <!-- #IMPLIED 可选 -->
        ]>
<!--
 斗破苍穹			缥缈之旅		诛仙			鬼吹灯			神墓
 天蚕土豆			 萧潜		      萧鼎		 天下霸唱		 辰东
   ¥86			   ¥92			 ¥98		  ¥124		   ¥128
 -->
<books>
    <book author ="天蚕土豆">
        <name>斗破苍穹</name>
        <price>86</price>

    </book>
    <book author ="萧潜">
        <name>缥缈之旅</name>
        <price>92</price>

    </book>
    <book author ="萧鼎">
        <name>诛仙</name>
        <price>98</price>

    </book>
    <book author ="天下霸唱">
        <name>鬼吹灯</name>
        <price>124</price>

    </book>
    <book author ="辰东">
        <name>神墓</name>
        <price>128</price>

    </book>



</books>

三.Schema约束

简单标签 – 只有一个元素以及元素文本内容

张三

复杂标签 – 当前标签中有属性或者子标签全部或者任意一个

张三

student元素 属于一个复杂元素

复杂元素 包含属性

18 student属于复杂元素

4.1如何约束一个XML

与DTD一样,可以通过schema约束xml文档的编写规范。常见框架使用schema的有:Spring等

简单元素和复杂元素指 的是xml中的标签是简单标签还是复杂标签

简单元素:标签仅仅包含文本标签体的元素

复杂元素:标签包括子标签或属性的元素 complexType

books.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/book"
        xmlns:tns="http://www.example.org/book"
        elementFormDefault="qualified">
    <element name="books">
        <!-- 包含子元素或属性的元素被称为 `复杂元素` -->
        <complexType>
            <sequence>
                <element name="book" minOccurs="1" maxOccurs="unbounded">
                    <complexType>
                        <sequence>
                            <!-- 对于拥有内容的元素, 需要编写 type 属性 -->
                            <element name="name" type="string"></element>
                            <element name="price" type="string"></element>
                        </sequence>
                        <!-- book 标签有 author 属性, 类型是字符串, 该属性必须填写 -->
                        <attribute name="author" type="string" use="required"></attribute>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值