侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

XML

coydone
2021-05-02 / 0 评论 / 0 点赞 / 416 阅读 / 7,898 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

xml概述

什么是XML

XML :可扩展标记语言(EXtensible Markup Language)。

XML是一种标记语言,很类似 HTML,HTML文件也是XML文档,标签都是自定义的。

W3C在1988年2月发布1.0版本,2004年2月又发布1.1版本,单因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。

XML与HTML的主要差异

xml标签都是自定义的,html标签是预定义。

xml的语法严格,html语法松散。

xml是存储数据的,html是展示数据。

xml的作用

存放数据

注意:创建 File,写 xxxxx.xml,一定要写.xml。

如在person.xml中添加如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="p001">
    <name>张三</name>
</person>
<person id="p002">
    <name>李四</name>
</person>
</persons>

类似于java代码

class Person{
    String id; 
	String name;
}

配置文件(框架常用)

比如:下面的是Spring框架的部分配置文件写法,使用的就是xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean className="com.coydone.bean.User">
    <property name="username" value="jack"></property>
</bean>
</beans>

xml的组成元素

文档声明

XML文档声明格式:

1、文档声明必须为结束;

2、文档声明必须从文档的0行0列位置开始;

3、文档声明只有2个属性:<?xml version="1.0" encoding="UTF-8"?>

  • version:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;

  • encoding:指定当前文档的编码。可选属性,默认值是utf-8;

元素

1、元素是XML文档中最重要的组成部分,

2、普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>大家好</hello>

3、元素体:元素体可以是元素,也可以是文本.

4、空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合,例如:<hello/>

5、元素命名:

  • 区分大小写

  • 不能使用空格,不能使用冒号:

  • 不建议以XML、xml、Xml开头

6、格式化良好的XML文档,必须只有一个根元素。

属性

1、属性是元素的一部分,它必须出现在元素的开始标签中 2. 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引。

2、一个元素可以有0~N个属性,但一个元素中不能出现同名属性。

3、属性名不能使用空格、冒号等特殊字符,且必须以字母开头。

注释

XML的注释,使用<!--注释内容-->。注释内容会被XML解析器忽略。

转义字符

因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:``<、>、’、”、&`。

xml约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。常见的xml约束:DTDSchema

DTD约束

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

DTD重点要求

开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2、hibernate、mybatis 等。

规则文件说明(了解):

  • ELEMENT 表示节点

  • PCDATA 该内容模型说明元素中可以同时出现文本和元素.

  • CDATA 属性值是字符数据

  • REQUIRED 表示属性值是必需的

  • IMPLIED value 属性值是固定的

  • ATTLIST 在 DTD 中,属性通过 ATTLIST 声明来进行声明

如创建bean.dtd文件

<?xml version="1.0" encoding="UTF-8"?>
        <!--
            模拟spring规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
            格式如下:
            <!DOCTYPE beans SYSTEM "bean.dtd">
        -->
        <!--
        ELEMENT:节点
        节点名称必须叫:beans
        (bean*,import*) : beans 元素里面,可以写 bean import元素,别的都不能写
         * : 可以写多个
         PCDATA:表示property元素 里面可以写 文本 也可以写 元素
         CDATA: 表示元素里面只能写文本
         REQUIRED:表示这些只能写这些属性
         ATTLIST:声明属性的作用
        -->
        <!ELEMENT beans (bean*,import*) >
        <!ELEMENT bean (property*)>
        <!ELEMENT property (#PCDATA)>
        <!ELEMENT import (#PCDATA)>
        <!ATTLIST bean id CDATA #REQUIRED
                className CDATA #REQUIRED
                >
        <!ATTLIST property name CDATA #REQUIRED
                value CDATA #REQUIRED
                >
        <!ATTLIST import resource CDATA #REQUIRED>

bean.dtd的同级目录下创建xxx.xml,就可以通过dtd约束来写xml文件了。

<?xml version="1.0" encoding="UTF-8" ?>
<!--表示引入bean.dtd约束-->
<!DOCTYPE beans SYSTEM "bean.dtd">
<!--现在有约束了-->
<beans>
    <bean id="b1" className="com.coydone.User">
        <property name="p1" value="123"></property>
        <property name="p1" value="123"></property>
        <property name="p1" value="123">
            <![CDATA[]]> (了解): 作用:把不合法的字符,转义成可用的字符。
            <![CDATA[
                public static void main(String args[]){
                    for(int i=0;i<5;i++){
                    }
                    for(int i=0;i<5;i++){
                    }
                    for(int i=0;i<5;i++){
                    }
                    for(int i=0;i<5;i++){
                    }
                    for(int i=0;i<5;i++){
                    }
                }
            ]]>
        </property>
    </bean>
    <bean id="b2" className="com.coydone.Customer">
        <property name="p2" value="123"></property>
    </bean>
    <import resource="com.coydone.bean.Test01"></import>
</beans>

Schema约束

  • Schema是新的XML文档约束;

  • Schema要比DTD强大很多,是DTD 替代者;

  • Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。

  • Schema 功能更强大,数据类型更完善

  • Schema 支持名称空间

Schema重点要求

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

规则文件说明:

<beans xmlns="http://www.coydone.com/bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.coydone.com/bean bean- schema.xsd">
</beans>
xmlns="http://www.ekgc.cn/bean":命名空间的名字xmlns="名字" W3C标 准, 命名空间的名字必须全球唯一性
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":W3C的官方约束
xsi:schemaLocation="命名空间名 约束文档的路径"

通过提供bean-schema.xsd编写xml文档。

注意:以下规则不用自己写,只需要把以下规则编写成bean-schema.xsd文件就可以了。

<?xml version="1.0" encoding="UTF-8"?>
<!--
    模拟spring规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
    格式如下:
       <beans xmlns="http://www.coydone.com/bean"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.coydone.com/bean bean-schema.xsd"
    >
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.coydone.com/bean"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://www.coydone.com/bean"
        elementFormDefault="qualified">
    <!-- 声明根标签 -->
    <element name="beans">
        <complexType>
            <choice minOccurs="0" maxOccurs="unbounded">
                <element name="bean">
                    <complexType>
                        <sequence minOccurs="0" maxOccurs="unbounded">
                            <element name="property">
                                <complexType>
                                    <attribute name="name" use="required"></attribute>
                                    <attribute name="value" use="required"></attribute>
                                </complexType>
                            </element>
                        </sequence>
                        <attribute name="id" use="required"></attribute>
                        <attribute name="className" use="required"></attribute>
                    </complexType>
                </element>
                <element name="import">
                    <complexType>
                        <attribute name="resource" use="required"></attribute>
                    </complexType>
                </element>
            </choice>
        </complexType>
    </element>
</schema>

在其同级目录下新建xxx.xml文件,通过Schema约束写xml文件。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.coydone.com/bean"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.coydone.com/bean bean-schema.xsd">
    <bean id="" className="">
        <property name="" value=""/>
        <property name="" value=""></property>
    </bean>
    <bean id="" className="">
        <property name="" value=""></property>
    </bean>
    <import resource=""></import>
</beans>

命名空间(语法)

命名空间概述

如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import java.util.和import java.sql.时,在使用Date类时,那么就不明确Date是哪个包下的Date了。总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。

约束文档和xml关系

当W3C提出Schema约束规范时,就提供“官方约束文档”。我们通过官方文档,必须“自定义schema 约束文档”,开发中“自定义文档”由框架编写者提供。我们提供“自定义文档”限定,编写出自己的xml文档。

声明命名空间(了解)

默认命名空间:,使用<标签>

显式命名空间:<xxx xmlns:别名=””>,使用<别名:标签>名称空间声明的一般形式为:第一部分是一个关键字xmlns:,第二部分是名称空间的前缀,第三部分是一个等号,第四部分是双引号,将第五部分的名称空间标识URI包括起来。需要注意的是,名称空间的前缀不能为xml,因为在XML中这个字符串是保留作特殊用途的。例:xmlns:tns="http://www.whtest.com/"//其中tns为前缀。还可以隐式声明名称空间,即省略掉冒号和名称空间前缀。例:xmlns="http://www.whtest.com/" //注意在一个文档中只能有一个隐式声明的。

简单示例

Spring中的配置文件applicationContext.xml,如下图:

来看一个复杂的,第一个声明的命名空间就是隐式声明。

0

评论区