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: 属性组

参考资料:

XML 之快速入门的更多相关文章

  1. springmvc快速入门(XML版本)

    1)springmvc快速入门(传统版) 步一:创建springmvc-day01这么一个web应用 步二:导入springioc,springweb , springmvc相关的jar包 步三:在/ ...

  2. XML快速入门

    XML是什么 Extensible Markup Language 自定义标签: 用来传输数据: 可扩展标记语言,是一种类似超文本标记语言的标记语言. 与HTML的比较: 1.不是用来替代HTML的: ...

  3. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  4. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. spring快速入门(四)

    一.在spring快速入门(三)的基础上,我们来了解BeanFactory及配置. Client package com.murong.client; import org.springframewo ...

  6. spring快速入门(三)

    一.在spring快速入门(二)的基础上,原先我们是采用构造方法完成对象的注入.这里还有其他的方法可以完成注入,通过set方法来完成. 修改UserActionImpl package com.mur ...

  7. spring快速入门(二)

    一.在spring快速入门(一)的基础上,我们来了解spring是如何解决对象的创建以及对象之间的依赖关系的问题 (比如client中依赖UserAction的具体实现,UserActionImpl中 ...

  8. html5快速入门(一)—— html简介

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  9. Spark快速入门 - Spark 1.6.0

    Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...

随机推荐

  1. Atitit.软件开发的几大规则,法则,与原则p821.doc

    Atitit.软件开发的几大规则,法则,与原则p821.doc 1. 设计模式六大原则2 1.1. 设计模式六大原则(1):单一职责原则2 1.2. 设计模式六大原则(2):里氏替换原则2 1.3.  ...

  2. makefile之强制目标

    强制目标 1. 定义 如果一个规则(rule_A)既没有依赖也没有命令,仅有目标(Targe_A),并且目标名不冲突.那么,在执行这个规则的时候,目标总被认为是更新过的.如果这个目标(Target_A ...

  3. 利用jquery的contains实现搜索功能

    / jquery实现的搜索功能 $('#search_btn').on('click',function(){ var txt=$('#inputValue').val(); var value=$( ...

  4. Linux之实用GDB技巧

    一.引言 在Linux下开发,肯定少不了与gdb打交道,而gdb的命令又非常多,有些是不常用的但是特殊情况下却是必须的,因此记录在此,以便翻阅 二.基本命令 前面是命令全名,在不混淆的情况下,可以简写 ...

  5. linux学习笔记28--监控命令vmstat,iostat, lsof

    linux的监控包括多个方面,常用的是进程,内存,I/O,磁盘空间这三个方面. vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程. ...

  6. VirtualBox下Linux加载Windows的共享目录

    1.Windows下,在VirtualBox安装增强功能. 菜单 -> 设备 -> 安装增强功能 2.Windows下,在VirtualBox设置共享目录. 设置 -> 共享文件夹 ...

  7. php max_execution_time执行时间问题

    php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件 ...

  8. 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务

    在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...

  9. android camera之nv21旋转

    这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相机打过交道的都清楚,android的came ...

  10. 由「Metaspace容量不足触发CMS GC」从而引发的思考

    https://mp.weixin.qq.com/s/1VP7l9iuId_ViP1Z_vCA-w 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小 ...