• XML 之快速入门


    XML 简介

    - XML, 即可扩展标记语言(eXtensible Markup Language), 是一种标记语言.
        - 标记型语言: 使用标签进行操作
        - 可扩展: XML 的标签可以自定义
    - XML 被设计用来传输和存储数据.
    - XML 有两个版本: 1.0 和 1.1. 广泛使用的是 1.0 版, 因为 1.1 版不能向下兼容.
    

    XML 和 HTML 的差异:

    • XML 被设计为传输和存储数据, 其焦点是数据的内容.
    • HTML 被设计用来显示数据, 其焦点是数据的外观.
    • HTML 旨在显示信息, 而 XML 旨在传输信息.

    XML 应用示例:

    // 示例一: 不同的系统之间传输数据
    // 邀请函
    <note>
    <to>ZhangSan</to>  // 邀请函的接收方
    <from>LiSi</from>  // 邀请函的发送方
    <heading>Invitation</heading>  // 邀请函标题
    <body>We will be married on September 18th.</body>
    </note>
    
    // 示例二: 用来表示生活中有关系的数据
    <中国>
        <北京>
            <海淀区></海淀区>
            <东城区></东城区>
            <西城区></西城区>
        </北京>
        <浙江>
            <杭州></杭州>
            <宁波></宁波>
            <温州></温州>
        </浙江>
    </中国>
    
    // 示例三: 经常用在配置文件中
        // 优点: 连接数据库时, 肯定需要知道数据库的用户名和密码, 以及数据库的名称
        // 如果需要修改数据库的信息, 有了配置文件后, 不需要修改源代码, 只要修改配置文件就可以了.
    

    XML 语法

    1. XML 的文档声明
    2. 定义元素(标签)
    3. 定义属性
    4. 注释
    5. 特殊字符
    6. CDATA 区(了解)
    7. PI 指令(了解)
    • XML 的文档声明

      • 书写 xml 的第一步,书写文档声明, 即表明该文档内容为 xml文件.
      • 文档声明格式: <?xml version="1.0" encoding="gbk"?>
      • 文档声明必须写在 xml 文件的第一行第一列
      • 文档声明中的属性
        • version: xml 使用的版本
        • encoding: xml 文档的编码
        • standalong: 是否需要依赖其他文件(yes/no), 该属性较少使用
    • XML 的标签

      • 标签的定义有开始必须要有结束, 例如: <person></person>.
      • 如果标签没有内容, 可以在标签内结束, 例如: <person />.
      • 标签可以嵌套,必须要正确的嵌套
        • 正确嵌套: <b><i>This text is bold and italic</i></b>
        • 不正确嵌套: <b><i>This text is bold and italic</b></i>
        • 所谓正确嵌套: 由于 <i> 元素是在 <b> 元素内打开的, 那么它必须在 <b> 元素内关闭.
      • 一个 xml 文件中, 只能有一个根标签, 其他标签都是这个标签的子标签或孙标签.
      • xml 标签可以是中文.
      • 在 xml 中把空格和换行都当成内容来解析
    // 下面两端代码含义是不一样的
    // 代码一:
    <aaa>Don't forget the meeting.</aaa>
    
    // 代码二:
    <aaa>
        Dont't forget the meeting.
    </aaa>
    
    • XML 标签的命名规则

      • xml 代码区分大小写, <p><P>, 这两个标签是不一样的.
      • xml 的标签, 不能以数字和 "_"(下划线) 开头
      • xml 的标签不能以 "xml", "XMl" 和 "Xml" 等开头
      • xml 的标签不能包含空格和冒号
    • XML 的属性

      • XML 是标记型文档, 可以在开始标签中包含属性. 属性用于提供关于元素的额外信息.
        例如, <person sex="female"></person>
      • 属性定义的要求:
        • 一个标签上可以有多个属性
        • 属性名称不能相同
        • 属性名称和属性值直接使用 "=" 连接, 属性值使用引号包起来(可以是单引号也可以是双引号)
        • xml 属性名称的命名规范和元素的命名规范一致.
        • 元数据(有关数据的数据) 应当存储为属性, 而数据本身应当存储为元素.
    // 属性示例:
    <class>  // 表示班级
        <number id="103">  // 此处 id 属性, 是一个标识符, 用于标识不同的学生
            <name>zhangsan</name>
            <sex>female</sex>
            <age>22</age>
        </number>
        <number id="104">
            <name>lisi</name>
            <sex>male</sex>
            <age>25</age>
        </number>
    </class>
    
    • XML 的注释

      • 格式: <!-- 这是注释 -->
      • 注释不能放到文档的第一行, 第一行第一列必须放文档声明.
    • xml 中的特殊符号

    符号 符号 名称
    &lt; < 小于
    &gt; > 大于
    &amp; & 和号
    &apos; ' 单引号
    &quot; " 双引号
    • CDATA 区
      • 可以解决多个字符都需要转义的操作, 将多个字符当作文本内容, 而不是标签中的元素
      • 格式: <![CDATA[ 内容 ]]>
    // 示例:
    <![CDATA[
        if(a<b && b<c && d<f){  // 此处 "<" 不需要转义操作
            return a+b;
        } else{
            return c+d;
        }
    ]]>
    
    • PI 指令(了解)
      • 可以在 XML 中设置样式 (可以是 CSS 样式或者 XSLT 样式)
      • 格式: <?xml-stylesheet type="text/css" href="css 文件的路径"?>
      • 设置样式, 只能对英文标签名起作用, 对中文的标签名称不起作用.

    xml 约束

    - 约束技术分为 DTD 约束和 Schema 约束
    - 约束的作用是定义 xml 文档的结构.
    

    DTD 约束

    1. DTD 文件的后缀名 .dtd

    2. 创建 DTD 文档的步骤

      • 查看 xml 文件中有多少个元素, 有几个元素, 在 dtd 文件中写几个 <!ELEMENT>
      • 判断元素是简单元素还是复杂元素
        • 简单元素: 没有子元素, 格式: <!ELEMENT 元素名称 (#PCDATA)>
        • 复杂元素: 有子元素的元素, 格式: <!ELEMENT 元素名称 (子元素)>
      • 在 xml 文件中引入 dtd 文件
        格式: <!DOCTYPE 根元素名称 SYSTEM "dtd 文件的路径">
      • 使用 eclipse 查看校验效果. 因为浏览器只负责校验 xml 的语法, 不负责校验约束.
    3. dtd 的三种引入方式

    // 第一种方式: 引入外部的 dtd 文件
        <!DOCTYPE 根元素名称 SYSTEM "dtd 路径">
    
    // 第二种方式: 使用 xml 页面内部的 dtd 文件
        <!DOCTYPE 根元素名称 [
                <!ELEMENT person (name,age)>
                <!ELEMENT name (#PCDATA)>
                <!ELEMENT age (#PCDATA)>
            ]>
    
    // 第三种方式: 使用网络上的 dtd 文件
        <!DOCTYPE 根元素 PUBLIC "dtd 名称" "dtd 文档的 url">
        // 示例: struts 2 中使用的配置文件, 使用的是外部的 dtd 文件
        <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    
    // 示例: 带有 DTD 的 XML 文档
    <?xml version="1.0" encoding="gbk"?>
    // dtd 约束
    <!DOCTYPE note [
        <!ELEMENT note (to,from,heading,body)>
        <!ELEMENT to    (#PCDATA)>
        <!ELEMENT from  (#PCDATA)>
        <!ELEMENT heading (#PCDATA)>
        <!ELEMENT body   (#PCDATA)>
    ]>
    
    // xml 内容
    <note>
        <to>zhangsan</to>
        <from>lisi</from>
        <heading>Invitation</heading>
        <body>Don't forget the meeting!</body>
    </note>
    
    1. DTD 元素

      • 格式: <!ELEMENT 元素名称 约束>
      • 简单元素: 没有子元素的元素
        • 格式: <!ELEMENT name (#PCDATA)>
        • (#PCDATA): 约束 name 是字符串类型
        • EMPTY: 元素为空
        • ANY: 任意类型
      • 复杂元素
        • 格式: <!ELEMENT 元素名称 (子元素)>,
          例如: <!ELEMENT person (name+,age?,sex*,school)>
        • 表示元素出现的次数:
          • + : 表示该元素可以出现一次或多次
          • ? : 表示该元素可以出现零次或一次
          • * : 表示该元素可以出现零次或多次
        • 子元素之间使用逗号进行分隔, 表示元素出现的顺序
        • 子元素之间使用 "|" 进行分隔, 表示元素只能出现其中的任意一个
    2. DTD 属性

      • 格式: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
      • 属性的类型:
        • CDATA: 表示值为字符数据
        • (en1|en2..): 表示值是枚举列表中的一个值
        • ID : 值只能是字母或者下划线开头,
      • 属性的约束
        • #REQUIRED: 属性是必需的
        • #IMPLIED: 属性是可有可无的
        • #FIXED: 属性值是固定的
        • 值: 该属性的默认值.
    // 示例:规定一个默认的属性值
        // DTD
        <!ELEMENT square EMPTY>
        <!ATTLIST square width CDATA "10">
    
        // 合法的 XML
        <square width="100" />  // 如果宽度没有被设定, 其默认值为 0
    
    // 示例: 枚举属性值
        // DTD
        <!ELEMENT payment (#PCDATA)>
        <!ATTLIST payment type (check|cash) "cash">
    
        // 合法的 XML
        <payment type="check" />
    
    1. DTD 实体
      • 实体是用于定义引用普通文本或特殊字符的快捷方式的变量
      • 在 DTD 中定义, 在 xml 中使用
      • 格式: <!ENTITY 实体名称 "实体内容">
      • 一个实体由三部分组成: "&" + 一个实体名称 + ";"
    // 示例:
        // DTD
        <!ENTITY writer "Bill Gates">
        <!ENTITY copyright "版权所有">
    
        // xml 文件
        <author>&writer;&copyright;</author>
    

    DTD 综合练习

    // dtd 约束文件
    <!DOCTYPE TVSCHEDULE [
    
    <!ELEMENT TVSCHEDULE (CHANNEL+)>
    <!ELEMENT CHANNEL (BANNER,DAY+)>
    <!ELEMENT BANNER (#PCDATA)>
    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
    <!ELEMENT HOLIDAY (#PCDATA)>
    <!ELEMENT DATE (#PCDATA)>
    <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
    <!ELEMENT TIME (#PCDATA)>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT DESCRIPTION (#PCDATA)>
    
    <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
    <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
    <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
    <!ATTLIST TITLE RATING CDATA #IMPLIED>
    <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
    
    ]>
    
    // 对应的 xml 文件
    <TVSCHEDULE NAME="CSA">
        <CHANNEL CHAN="1">
            <BANNER>
                探索频道
            </BANNER>
            <DAY>
                <DATE>
                    星期五
                </DATE>
                <HOLIDAY>
                    探索世界
                </HOLIDAY>
            </DAY>
        </CHANNEL>
        <CHANNEL CHAN="2">
            <BANNER>
                经济频道
            </BANNER>
            <DAY>
                <DATE>
                    星期二
                </DATE>
                <PROGRAMSLOT>
                    <TIME>
                        9:10
                    </TIME>
                    <TITLE>
                        时间
                    </TITLE>
                    <DESCRIPTION>
                        北京时间
                    </DESCRIPTION>
                </PROGRAMSLOT>
            </DAY>
        </CHANNEL>
    </TVSCHEDULE>
    

    Schema 约束

    • Schema 文件本身就是一个 xml 文件, 文件扩展名 ".xsd"
      • Schema 文件的第一行是 xml 的文档声明, 根节点是 <shema>
    • 一个 xml 文件中可以有多个 Schema 文件
    // 示例
        // xml 文档
        <?xml version="1.0" encoding="gbk"?>
        <note>
            <to>zhangsan</to>
            <from>lisi</from>
            <heading>Invitation</heading>
            <body>Don't forget the meeting!</body>
        </note>
    
    
        // Schema 约束
        <?xml version="1.0" encoding="gbk"?>
        <xs:shema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.cnblogs.com/linkworld/"
        xmlns="http://www.cnblogs.com/linkworld/"
        elementFormDefault="qualified">
    
        <xs:element name="note">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="to" type="xs:string"/>
                    <xs:element name="from" type="xs:string"/>
                    <xs:element name="heading" type="xs:string"/>
                    <xs:element name="body" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        <xs:element>
        </xs:schema>
    
        // 对于 Schema 的引用
        <?xml version="1.0" encoding="gbk"?>
        <note
        xmlns="http://www.cnblogs.com/linkworld/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.cnblogs.com/linkworld/ note.xsd">
    
            <to>zhangsan</to>
            <from>lisi</from>
            <heading>Invitation</heading>
            <body>Don't forget the meeting!</body>
        </note>
    
    • Schema 约束文件说明

      • <schema> 元素可包含属性
      • xmlns:xs="http://www.w3.org/2001/XMLSchema"
      • targetNamespace="http://www.cnblogs.com/linkworld/"
        • 使用 schema 约束文件时, 直接通过这个地址引入约束文件. 为了避免约束空间的重复, 使用 url 地址命名
      • xmlns="http://www.cnblogs.com/linkworld/"
      • elementFormDefault="qualified"
        • 表示任何 xml 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
    • 在 xml 文件中引入 Schema 约束文件

      • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        • 表示该 xml 文件是一个被约束文件, 注意 -instance
        • "xsi" 表示 xmlns 的别名, 为了避免和下面名称空间的冲突
      • xmlns="http://www.cnblogs.com/linkworld/"
      • xsi:schemaLocation="http://www.cnblogs.com/linkworld/ note.xsd">
        • 包含两个参数
        • 第一个参数是需要使用的命名空间
        • 第二个参数约束文档的地址路径
    • 编写 Schema 约束文件步骤

    // 1. 查看 xml 中有多少个元素, `<element name="元素名">`
    // 2. 查看简单元素和复杂元素
            // 复杂元素
                <complexType>
                    <sequence>
                        子元素
                    </sequence>
                </complexType>
    
            // 简单元素, 写在复杂元素 sequence 里面
                <element name="元素名"/>
    
    • Schema 中的简单元素
      • 简单元素指那些仅包含文本的元素
    // 1. 定义简单元素的语法:
        <element name="元素名" type="元素类型"/>
    
    // 示例:
        // xml 文件
        <lastname>Smith</lastname>
        <age>29</age>
        <birthday>1996-4-9</birthday>
    
        // schema 约束
        <element name="lastname" type="string"/>  // lastname 的类型是 string
        <element name="age" type="integer"/>  // age 的类型是 integer
        <element name="birthday" type="date"/> // birthday 的类型是 date
    
        // 简单元素的默认值和固定值
        <element name="color" type="string" default="red"/> // 默认值
    
        <element name="color" type="string" fixed="red"/> //固定值
    
    • Schema 中复杂元素指示器
      • Order 指示器: 用于定义元素的顺序
        • All: 可以按照任意顺序出现, 并且每个子元素必须只出现一次
        • Choice: 表示元素只能出现其中的一个
        • Sequence: 子元素必须按照特定的顺序出现
      • Occurrence 指示器: 用于定义某个元素出现的频率
        • maxOccurs: 某个元素可出现的最大次数
        • minOccurs: 某个元素能够出现的最小次数
      • Group 指示器: 用于定义相关的数批元素
        • Group name: 元素组
        • attributeGroup name: 属性组

    参考资料:

  • 相关阅读:
    扑克牌顺子
    多任务Multitask Learning
    智能指针
    左旋转字符串
    和为s的两个数字
    07.极简主义读后感
    06.极简主义——汇流(笔记)
    05.极简主义——奉献(笔记)
    04.极简主义——热情(笔记)
    03.极简主义——人际关系(笔记)
  • 原文地址:https://www.cnblogs.com/linkworld/p/7560879.html
Copyright © 2020-2023  润新知