菜鸟程序猿之XML基础

一. xml概述
    1.xml是什么?
        Extensible Markup Language 可扩展标记语言
        W3C 2000 1.0
        xml是一种数据存储格式, 本质上就是一段字符串
        xml是如何来保存数据的?
            xml中允许用户自定义标签,标签分为开始标签和结束标签。开始标签和结束标签之间可以嵌套其他的标签。
            正是利用标签来保存数据, 利用标签之间嵌套关系来保存数据之间的层级关系

    2.xml的应用场景
        (1)传输数据
            由于xml本质上是一段字符串, 具有跨平台的特性, 因此可以在不同系统之间进行数据交换。
    
        (2)用作配置文件
            由于xml可以保存有结构的数据, 因此xml常被用来用作应用程序的配置文件。

    3.xml文件
        编写一个xml文件
    4.xml校验
        校验xml文件

二. 语法
    1.文档声明
        用来声明当前xml基本属性信息的, 解析器会根据文档声明来决定如何解析xml文件
        注意:
            一个xml文件必须包含且只能包含一个文档声明
            文档声明必须放在xml文件的第一行,前面不能有任何内容
            如果一个xml文件没有包含文档声明, 则该xml是一个不符合规范的xml文件
        写法:
            <?xml version="1.0"?>
                version用来声明当前xml所遵循的xml规范, 目前就是1.0
            <?xml version="1.0" encoding="UTF-8"?>
                encoding用来声明当前xml所使用的字符集编码, xml解析器在解析xml的时候,会根据encoding属性所指定的编码来解析xml文件。
                注意: 文件在保存时所使用的编码要和encoding属性所指定编码相同, 才可以避免乱码问题。
            <?xml verison="1.0" encoding="UTF-8"? standalone="yes">
                standalone用来声明当前文档是否独立, 如果xml文档不依赖其他的文档而存在, 表明当前文档是一个独立的文档, 可以指定值为yes, 如果当前文档需要依赖其他的文档而存在, 需要指定值为no

    2.元素
        一个标签就是一个元素
        标签分为开始标签和结束标签, 在开始标签和结束标签之间的文本称之为标签体
        如果一个标签既不包含标签体, 也不包含其他的子标签, 可以把开始标签和结束标签合并成一个自闭标签
        标签要合理的嵌套, 不能出现交叉嵌套
        一个xml文件有且仅有一个根标签
        元素的命名规范:
            区分大小写 如<P> <p>是两个不同的标签
            不能以数字,标点符号或下划线开头
            不能以xml(XML, Xml)开头
            不能包含空格 <a b>
            不能包含冒号 <a:b>
        易犯错误: 标签没有结束标签或者是自闭标签没有自闭!!!    
    3.属性
        一个元素上可以声明多个属性, 多个属性之间用空格隔开
        属性与属性值用等号连接, 属性的值用单引号或者双引号引起来
        属性的命名和元素遵循相同的命名规范

    4.注释
        格式: <!-- xml注释 -->
        注释不能放在文档声明的前面
        注释不能交叉嵌套
        
    5.转义字符 CDATA区
        (1)转义字符:
            <  &lt;
            >  &gt;
            &  &amp;
            "  &quot;
            '  &apos;
            对于个别的特殊字符的转义, 使用转义字符十分方便
            对于大段文本中包含大量的特殊字符, 使用转义字符转义效率低下
            对于一些想要保持原文的特殊字符, 转义字符无能为力
        
        (2)CDATA区:
            格式:
                <![CDATA[
                    大段文本
                ]]>
            被CDATA区包裹起来的内容不会被解析器解析, 只会当作普通文本输出    
            对于大段文本中包含大量的特殊字符, 使用CDATA区处理十分方便
            对于一些想要保持原文的特殊字符, 只能用CDATA处理
    6.处理指令(了解)
        用来指挥解析引擎如何处理xml文档的其他部分的内容
        格式: <?指令名 属性... ?>
        文档声明就是一个特殊的处理指令

三. xml约束
    约束: 在xml中, 可以提供约束文档来约束xml文档的写法
    DTD/Schema W3C
    DTD
    1.在xml中引入DTD的两种方式
        (1)外部引入
            a)引入本地的约束文档
                <!DOCTYPE 根元素的名称 SYSTEM "DTD文件的位置">
                
            b)引入公共位置上的约束文档
                <!DOCTYPE 根元素的名称 PUBLIC "DTD的名称" "DTD的url" >

        (2)内部引入
            格式:
            <!DOCTYPE 根元素名称[
                DTD约束语句
                ...
                ...
            ]>

    2.DTD的语法
        (1)元素约束
            <!ELEMENT 元素名称 元素约束>
            元素约束:
                a)存放类型
                    ANY:表明元素可以包含任意内容 如: <!ELEMENT 书架 ANY>
                    EMPTY:表明元素不可包含任何内容 如: <!ELEMENT 书架 EMPTY>
                b)子元素列表
                    ◇ #PCDATA: 表明元素包含内容只能是普通的字符串类型
                        例如: <!ELEMENT 书名 (#PCDATA)>
                    ◇ 子元素列表, 在书写子元素列表时,
                        可以用逗号进行分割, 表明子元素必须按照声明的顺序出现
                            例如:<!ELEMENT 书 (书名,作者,售价)>
                        也可以使用竖线进行分割, 表明多个子元素只能出现其中一个
                            例如: <!ELEMENT 书 (书名|作者|售价)>
                        可以使用特殊字符表明元素出现的次数
                            ? 表明元素可以出现零次或一次
                            + 表明元素可以出现一次或多次
                            * 表明元素可以出现零次或多次
                            例如: <!ELEMENT 书架 (书*)>
                        也可以使用()进行组的操作
                            例如: <!ELEMENT 书 ((书名,作者+,版次,描述*)? | 评论+) >
        (2)属性约束
            <!ATTLIST 元素名称
                属性名 属性类型 属性约束
                .....
            >
            a)属性约束
                #REQUIRED 表明属性是一个必须存在的属性 例如: 出版社 CDATA #REQUIRED
                #IMPLIED 表明属性是一个可选的属性
                #FIXED "固定值" 表明当前属性有一个固定值, 如果不声明这个属性, 默认就有这个属性,并且值就是给定的默认值, 如果声明这个属性, 值必须是给定值,不能改变
                "默认值" 表明当前属性有一个默认值, 如果不声明这个属性, 默认就有这个属性, 值就是默认值, 如果声明这个属性, 也可以给其他值
                
                
            b)属性类型
                CDATA:表明属性的值是一个普通字符串类型
                ENUMERATED:表明属性的值必须给定的值中的一个
                ID: 表明属性是一个编号, 值在整个xml中必须是唯一的, 注意 id的值只能以字母或下划线开头, 不能以数字开头,也不能包含空格
                ENTITY:(单讲)

        (3)ENTITY(实体)
            在xml中,可以为一段内容创建别名, 就可以使用这段别名来代替这段内容
            a)引用实体(用在xml中的实体)
                <!ENTITY 实体名称 "实体内容">
                使用: &实体名称;

            b)参数实体(用在DTD中的实体)
                <!ENTITY % 实体名称 "实体内容">
                使用: %实体名称;
四.xml解析
    1.两种解析思想
        DOM解析
        SAX解析
    2.DOM4J解析   
    

猜你喜欢

转载自blog.csdn.net/yxh13521338301/article/details/80640748