当前位置 博文首页 > 蚂蚁小哥:XML从入门到深入(超详细)

    蚂蚁小哥:XML从入门到深入(超详细)

    作者:蚂蚁小哥 时间:2021-06-24 18:46

    一:什么是XML

      XML (eXtensible Markup Language)指可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
      XML可以标记数据、定义数据类型,可以允许用户对自己标记语言进行自定义,是对人和机器都比较友好的数据承载方式;XML其前身是SGML(标准通用标记语言)。
      传统的系统已经远远不足以来表达复杂的信息,简单的语言根本无法表达出一些细微的差别,需要更完整的语言来表达网络世界里日益丰富复杂的信息内涵
      XML - 可扩展标记语言便由此诞生,它不像HTML追求美观的效果,而不重视实际交流应用现象,所以XML语言的出现核心是用来展示及数据的交互,它的出现把网络表达的语言集合推进了一大步,XML传递信息,具有跨平台的特性(如:WebService)它作为数据交互和网络计算基础,尤其是在电子商务应用上的出色表现,现在已经没人怀疑它给信息社会带来的革命性影响(随着2021的到来JSON也是一个不错的选择)
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <Students>
        <Student>
            <name>蚂蚁小哥</name>
            <address>安徽六安</address>
        </Student>
        <Student>
            <name>欧阳康康</name>
            <address>安徽六安</address>
        </Student>
    </Students>

    1:编写XML注意事项

    ①:XML 中的每个元素都是成对出现的,有开始和结束,自闭和标签除外,但是都得有 '/'结束标志
        如:<student>xxxxx</student>    自闭和:<student name='xxx' />
    ②:每个XML文档都有且只有一个根元素(Root Element)
    ③:XML标签对大小写敏感
    ④:XML必须正确嵌套
    ⑤:同级标签以所缩进对齐
    ⑥:元素名称可以包含字母,数字,但不能以数字开头
    ⑦:元素名称中不能含有空格 或者 ' : '号
    ⑧:如出现特殊字符需要转义 如:<,>,",',&....

    2:使用XML的优缺点

    优点:
    ①:XML是使用信息自描述的新语言(没有约束的情况下)
    ②:信息共享(自定义数据格式,而且很容易使用工具读写)
    ③:数据传递(支持各种通道传递数据,如WebService就使用XML传输数据)
    ④:数据重用、分离数据和显示、文档包含语义、方便阅读有面向对象的树形结构
    
    缺点:
    ①:数据量大是传输效果不好,因为XML定义了和数据无关的标签

    3:XML基本语法

    第一行必须是XML的声明<?xml  ?> 
        version:xml的版本,必须设定,当前只有'1.0'版本
        encoding:当前xml里面的数据格式,默认UTF-8
        standalone:标记是否是一个独立的xml,默认yes
            如果设置 no 表示这个XML不是独立的而是依赖于外部的DTD约束文件(后面说)
    
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <Students>
        <Student>
            <name>蚂蚁小哥</name>
            <address>安徽六安</address>
        </Student>
    </Students>

    二:XML专用标记

      XML其实是有专用的标记,也可以理解是XML的基本语法,但是这些语法你在看HTML语法时也看到过,因它们都属于一个大家族,只是应用的方向不一样而导致的差异有部分不一样

    1:XML注释

      语法:<!--  这是一个注释  -->

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <School>
        <!--定义学生对象  这是一个注释-->
        <Student id="st01" name="张三" age="23"/>
    </School>
    ①:注释里的内容不要出现 --
    ②:不要把注释写在元素中间 如<Student <!--这里注释报错--> ></Student>
    ③:注释不可嵌套

    2:XML处理PI指令

      其实XML里的PI指令大家可以理解为XML设置样式的,但是考虑到XML是用于存储数据的载体,所以这个指令用的也不多

      语法:<?目标   指令?>

      如引入CSS样式:<?xml-stylesheet  type='css类型'  href='引入css样式地址'> 

      CSS类型可以设置 type='text/css'  type='text/xsl'

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!--引入PI指令 注意只能放在头部  并引入style.css样式-->
    <?xml-stylesheet type='text/css' href='./style.css' ?>
    <School>
        <!--定义学生对象  这是一个注释-->
        <Student>
            <name>蚂蚁小哥</name>
        </Student>
    </School>
    
    <!--CSS样式-->
    name {
        font: normal 500 22px "微软雅黑";
        color:#f69;
    }

    3:XML之CDATA节

      用于把整段文本解析为纯字符串数据而不是标记的情况,其实包含在CDATA节中的特殊字符<、>、&都会当作字符展示

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <School>
        <!--定义学生对象  这是一个注释-->
        <Student>
            <!--使用<![CDATA[xxx]]>可以把特殊字符当作文本-->
            <name><![CDATA[我是一个"文本":想不到把]]></name>
        </Student>
    </School>

      那么问题来的,如果我不使用CDATA节包裹的话在文本区域输入<,>等就会和关键字符冲突,我们需要使用转义

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <School>
        <!--定义学生对象  这是一个注释-->
        <Student>
            <!--这里的蚂蚁小< > 哥报错 <>干扰,我们要使用转义-->
            <!--<name>蚂蚁小<>哥</name>-->
            <name>蚂蚁小&lt;&gt;</name>
        </Student>
    </School>
    <!--常用网页转义字符   xml也可以使用-->
    <!--
    显示结果            描述            实体名称            实体编号
                    空格            &nbsp;            &#160;
        <            小于号        &lt;            &#60;
        >            大于号        &gt;            &#62;
        &            和号            &amp;            &#38;
        "            引号            &quot;            &#34;
        '            撇号            &apos;(IE不支持)    &#39;
        ¢            分            &cent;            &#162;
        £            镑            &pound;            &#163;
        ¥            日圆            &yen;            &#165;
        §            节            &sect;            &#167;
        ?            版权            &copy;            &#169;
        ?            注册商标        &reg;            &#174;
        ×            乘号            &times;            &#215;
        ÷            除号            &divide;        &#247;
    -->
    XML中转义字符的使用

    三:核心DTD语法约束

    1:什么是DTD,为什么使用DTD

      DTD是文档类型定义(Document Type Definiyion),它是用来描述XML文档结构,一个DTD文档会包含如下内容:

    元素(ELEMENT):的定义规则,描述元素之间的关系规则
    属性(ATTLIST):的定义规则,可以定义具体的标签内部属性
    
    为什么使用DTD:
        ①:DTD文档与XML文档实例关系如类与对象关系
        ②:有了DTD,每个XML文件可以携带一个自身格式描述
        ③:有了DTD,不同组织的人可以使用一个通用DTD来交换数据
        ④:应用程序可以使用一个标准的DTD校验从外部世界接受来的XML是否是一个有效标准XML
        ⑤:可以使用DTD校验自己的XML数据

    2:DTD定义文档规则(DOCTYPE)

    DTD文档的声明及引用有三种:
        内部DTD文档:
            <!DOCTYPE  根元素[定义元素属性等等内容]>
        外部DTD文档:
            <!DOCTYPE 根元素  SYSTEM 'DTD文件路径'>
        内外部DTD文档结合:
            <!DOCTYPE 根元素  SYSTEM 'DTD文件路径'[定义元素属性等等内容]>
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!--注:此时我这里面的 ELEMENT 定义元素的我后面介绍-->
    <!DOCTYPE Student[
            <!ELEMENT Student (name)>
            <!ELEMENT name (#PCDATA)>
            ]>
    <Student>
        <name>蚂蚁小哥</name>
    </Student>
    内部定义DTD文档
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE Student SYSTEM './st.dtd'>
    <Student>
        <name>蚂蚁小哥</name>
    </Student>
    
    <!--下面是文件 st.dtd-->
    <!DOCTYPE Student[
            <!ELEMENT Student (name)>
            <!ELEMENT name (#PCDATA)>
            ]>
    外部定义DTD文档
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE Student SYSTEM './st.dtd'[
            <!ELEMENT Student (name,age,sex)>
            <!ELEMENT sex (#PCDATA)>
            ]>
    <Student>
        <name>蚂蚁小哥</name>
        <age>23</age>
        <sex></sex>
    </Student>
    
    <!--外部引用的st.dtd文件-->
    <?xml version="1.0" encoding="UTF-8" ?>
    <!--这里不能写DOCTYPE,因为这个可以当作元素引用,具体规则在上面定义-->
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    内外部定义DTD文档

    3:DTD元素的定义(ELEMENT)

    语法:<!ELEMENT 元素名称(NAME)  元素类型(COUTENT)>
        注:ELEMENT关键字
    元素名称:就是自定义的子标签名称
    元素类型:
        EMPTY:该元素不能包含子元素和文本,但是可以有属性,这类元素称为自闭和标签
        ANY:该元素可以包含任意在DTD中定义的元素内容
        #PCDATA:可以包含任何字符数据,设置这个就不能包含子元素了,一般设置具体value
        混合元素类型:只包含子元素,并且这些子元素没有文本
        混合类型:包含子元素和文本数据混合体
    <!-- 定义空元素EMPTY -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE Student[
            <!ELEMENT Student EMPTY>
            ]>
    <!--约束为空元素 所以写成自闭和标签,-->
    <Student/>
    
    <!-- 定义组合元素(student,teacher)并为每个元素设置类型(#PCDATA) -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE School[
            <!ELEMENT School (student,teacher)>
            <!ELEMENT student (#PCDATA)>
            <!ELEMENT teacher (#PCDATA)>
            ]>
    <School>
        <student>我是学生</student>
        <teacher>我是老师</teacher>
    </School>
    
    <!-- 设置任意元素ANY 虽然student元素内部没有再设置元素而设置ANY,那我就可以
         在编写任意子元素,前提在里面有定义 -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE School[
            <!ELEMENT School (student)>
    
    下一篇:没有了