XML基础知识
来源:互联网 发布:js concat 编辑:程序博客网 时间:2024/06/05 14:28
XML由来
Extensible Markup Language,翻译可扩展标记语言。XML技术是w3c组织发布的,目前遵循的是w3c组织于2000发布的XML1.0规范。
生活中大量存在有关系的数据,如下图所示:
XML语言出现的根本目的在于描述上图那种,在现实生活中经常出现的有关系的数据。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如:
XML常见应用
XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模板之间的关系。
在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定
*例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和
B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。
<soft> <a> <a1></a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
XML语法
一个XML文件分为如下几部分内容
*文档声明
*元素
*属性
*注释
*CDATA区,特殊字符
*处理指令(processing instruction)
XML语法之文档声明
在编写XML文档时,需要先使用文档声明,声明XML文档的类型。
1. 最简单的声明语法:
<!--最简单的声明语法--><?xml version="1.0" ?><soft> <a> <a1></a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
2.用encoding属性说明文档的字符编码:
1}如果没有用encoding说明的话,则IE浏览器会无法解析(Windows 10系统)
<?xml version="1.0" ?><soft> <a> <a1>中国</a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
2)反之(Windows 10系统),如下图显示
<?xml version="1.0" encoding="GB2312" ?><soft> <a> <a1>中国</a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
注意:如果为了统一使用编码方式的话,请将*.xml文件打开(工具:文本、editplus等),然后另存为,将编码方式更改为UTF-8即可,IE浏览器不会出现无法解析。如果是用eclipse等工具,则会自动切换编码方式(GB2312、UTF-8等)
3.用standalone属性说明文档是否独立(可能会与其他文档关联使用):
<?xml version="1.0" encoding="GB2312" standalone="yes" ?><soft> <a> <a1>中国</a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft> <a> <a1>中国</a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
提问:此处在IE浏览器中不论是否独立,都可以打开,IE浏览器并不识别standalone这个属性,如有知道原由的网友,请告知普及一下,谢谢
XML语法之元素
*XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:
a.包含标签体:
<a>www.baidu.com</a>
b.不含标签体
<a></a>
或简写成空标签
<a/>
*一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套,例如:
<a>welcome to<b>www.baidu.com</a></b>
*格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。
*对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。例如:以下两段内容的意义是不同的
<网址>www.baidu.com</网址>
<网址> www.baidu.com</网址>
*由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯要做改变了。
*一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
- 区分大小写,例如:
<P>和<p>是两个不同的标记;
- 不能以数字或”_”(下划线)开头;
- 不能以xml(XML、Xml)开头;
- 不能包含空格;
- 名称中间不能包含冒号(:);
XML语法之属性
*一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
<input name="text">
*属性值一定要用双引号(” “)或单引号(’ ‘)引起来
*定义属性必须遵循与标签相同的命名规范
*在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
<input> <name>text</name></input>
XML语法之注释
*xml文件中的注释采用:”“格式。
*注意:
XML声明之前不能有注释
<!--在XML声明之前写注释是错误的--><?xml version="1.0" encoding="GB2312" standalone="no" ?><soft> <a> <a1>中国</a1> <a2></a2> </a> <b> <b1></b1> <b2></b2> </b></soft>
注释不能嵌套,例如:
<!-- <!--局部注释-->-->
XML语法之CDATA区
*在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理;
*如果遇到此情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出;
*这是给计算机阅读的方式;
*语法:
<![CDATA[内容]]>
<![CDATA[ <china> <br/> </china>]]>
示例:
<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft> <![CDATA[ <a> <a1>中国</a1> <a2></a2> </a> ]]> <b> <b1></b1> <b2></b2> </b></soft>
XML语法之转义字符
*对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理;
*这是给人阅读的方式;
示例转义字符:
<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft> <![CDATA[ <a> <a1>中国</a1> <a2></a2> </a> ]]> <b> <b1></b1> <b2></b2> </b></soft>
结果显示:
注意:经过转义字符处理后的效果和CDATA的效果相似,但是对计算机而言却是不同的。
XML语法之处理指令
*处理指令,简称PI(processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容;
*例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容
(此时需要同时新建一个css文件);
<?xml-stypesheet type="text/css" href="one.css" ?>
*处理指令必须以
<?作为开头,以?>作为结尾
XML声明语句就是最常见的一种处理指令;
实例:config.xml文件
<?xml version="1.0" encoding="GB2312" standalone="no" ?><?xml-stylesheet type="text/css" href="config.css" ?><soft> <a> <a1 id="a1">中国</a1> <a2 id="a2">美国</a2> </a> <b> <b1 id="b1">日本</b1> <b2 id="b2">英国</b2> </b></soft>
config.css文件
#a1{ font-size:300px; color:red;}#a2{ font-size:100px; color:green;}#b1{ font-size:20px;}#b2{ font-size:200px; color:blue;}
显示效果:
提问:为什么我在Windows10下,xml和css文件相结合,用IE解析,并没有显示出css的效果?
答:有些浏览器并不会解析出css的效果。但尝试了下,Microsoft Edge浏览器是可以的
XML约束概述
*什么是XML约束
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束;
*常用的约束技术
XML DTD
XML Schema
DTD约束入门
DTD(Document Type Definition),全称为文档类型定义。
实例:book.dtd文档
DTD约束在单独的文件编写
<!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>
实例:book.xml文档
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架> <书> <书名>Java in Thinking</书名> <作者>张笑笑</作者> <售价>39.00元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张笑笑</作者> <售价>50.00元</售价> </书> <老师></老师> <学生></学生></书架>
经过book.dtd文档的约束,book.xml文档的元素会被限制。但在浏览器解析时照样会输出约束之外的元素。在编程工具idea或eclipse中会提示有错误。
在浏览器中的显示效果:
在idea中显示的效果:
编写DTD约束的两种方式
*DTD约束即可以作为一个单独的文件编写(在上述已经提及),也可以在XML文件内编写;
单独的book.dtd文档,与在XML文件内编写进行比对
<!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>
在XML文件内编写,如下显示:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]><书架> <书> <书名>Java in Thinking</书名> <作者>张笑笑</作者> <售价>39.00元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张笑笑</作者> <售价>50.00元</售价> </书></书架>
引用DTD约束
*XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:
1.当引用的文件在本地时(即:.dtd文件和.xml文件分开编写),采用如下形式:
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">例如:<!DOCTYPE 书架 SYSTEM "book.dtd">
2.当引用的文件是一个公共的文件时,采用如下形式:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">例如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystem.Inc//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
DTD约束语法细节
*元素定义
*属性定义
*实体定义
DTD语法细节之元素定义1
*在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:
*这里的XML元素相当于指的标签;
<!ELEMENT 元素名称 元素类型或元素内容>
*当为:元素内容
1.如为元素内容:则需要使用()括起来,如
<!ELEMENT 书架 (书名,作者,售价)><!ELEMENT 书名 (#PCDATA)>
*当为:元素类型
2.如为元素类型,则直接书写,DTD规范定义了如下几种类型:
a、EMPTY:用于定义空元素;
b、ANY:表示元素内容为任意类型;
例如,当为ANY
<!ELEMENT 书架 ANY> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>
则在xml文件可以添加任意类型的元素,不只限制在书标签,有可能是老师、学生等其他标签;
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架> <书> <书名>Java in Thinking</书名> <作者>张笑笑</作者> <售价>39.00元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张笑笑</作者> <售价>50.00元</售价> </书> <老师></老师> <学生></学生></书架>
DTD语法细节之元素定义2
1.元素内容中可以使用如下方式,描述内容的组成关系
- 用逗号分隔,表示内容的出现顺序必须与声明时一致;
<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)
- 用|分隔,表示任选其一,即多个只能出现一个;
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>
2.在元素内容中也可以使用+、*、?等符号表示元素出现的次数:
3.也可使用圆括号()批量设置,例:
<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>
DTD语法细节之属性定义
- xml文档中的标签属性需通过ATTLIST为其设置属性
- 语法格式:
<!ATTLIST 元素名(或称为标签名) 属性名1 属性值类型 设置说明 属性名1 属性值类型 设置说明 ......>
- 属性声明举例:
<!ATTLIST 商品 类别 CDATA #REQUIRED 颜色 CDATA #IMPLIED>
- 对应XML文件:
<商品 类别="服装" 颜色="黄色">...</商品><商品 类别="服装">...</商品>
属性定义的详解
设置说明:
- #REQUIRED:必须设置该属性
- #IMPLIED:可以设置也可以不设置
- #FIXED:说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其它值,但需要为该属性提供这个值。
- 直接使用默认值:在XML中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
举例
<!ATTLIST 页面作者 姓名 CDATA #IMPLIED 年龄 CDATA #IMPLIED 联系信息 CDATA #REQUIRED 网站职务 CDATA #FIXED "页面作者" 个人爱好 CDATA "上网">
对应的XML文件:
<页面作者 联系信息="888888">...</页面作者>
该XML文件中,有三个属性,其中网站职务和个人爱好隐藏了没有显示说明
常用属性值类型
- CDATA:表示属性值为普通文本字符串
- ENUMERATED:枚举
- ID
- ENTITY(实体)
属性值类型-ENUMERATED
- 属性的类型可以是一组取值的列表,在XML文件中设置的属性值只是这个列表中的某个值(枚举)
<?xml version="1.0" encoding="GB2312" standalone="yes"?><!DOCTYPE 购物篮 [ <!ELEMENT 肉 EMPRY> <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">]><购物篮> <肉 品种="鱼肉"/> <肉 品种="牛肉"/> <肉/></购物篮>
属性值类型-ID
- 表示属性的设置值为一个唯一值;
- ID属性的值只能由字母,下划线开始,不能出现空白字符
<?xml version="1.0" encoding="GB2312"?><!DOCTYPE 联系人列表 [ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名,EMAIL)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ATTLIST 联系人 编号 ID #REQUIRED>]><联系人列表> <联系人 编号="A1"> <姓名>张三</姓名> <EMAIL>zhang@128.org</EMAIL> </联系人> <联系人 编号="A2"> <姓名>李四</姓名> <EMAIL>李四@128.org</EMAIL> </联系人></联系人列表>
属性值类型-ENTITY(实体)
- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了;
在DTD定义中,一条<!ENTITY...>语句用于定义一个实体;
- 实体可分为两种类型:引用实体和参数实体;
- 引用实体主要在XML文档中被应用;
- 语法格式:
引用实体
<!ENTITY 实体名称 "实体内容">直接转变成实体内容
- 引用方式:《&实体名称;》
- 举例:
<!ENTITY copyright "I am a programmer">......©right;
- 实际中的应用
book.dtd文档
<!ENTITY bookname "javaweb开发"><!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)>
book.xml文档
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架> <书> <书名>&bookname;</书名> <作者>张笑笑</作者> <售价>39.00元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张笑笑</作者> <售价>50.00元</售价> </书></书架>
参数实体
- 参数实体被DTD文件自身使用
- 语法格式:
<!ENTITY % 实体名称 "实体内容">
- 引用方式:《%实体名称;》
- 举例1:
<!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址"><!ELEMENT 个人信息 (%TAG_NAMES;|生日)><!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>
- 举例2:
<!ENTITY % common.attributes "id ID #IMPLIED account CDATA #REQUIRED">...<!ATTLIST purchaseOrder %common.attributes;><!ATTLIST item %common.attributes;>
- xml基础知识
- xml基础知识
- xml基础知识
- XML基础知识
- XML基础知识
- xml基础知识
- XML基础知识
- xml基础知识
- XML基础知识
- xml基础知识
- XML基础知识
- XML基础知识
- XML基础知识
- XML基础知识
- XML基础知识
- xml基础知识
- XML 基础知识
- XML基础知识
- 智慧树
- Vim 让每一个键都拥有灵魂
- HDU之小小作者-----Mer de sause;
- 输入一个字符串(包含数字和非数字字符)统计数字
- Luogu1919 a*b problem FFT
- XML基础知识
- 大数据(三十五)HBASE【mapreduce操作hbase】
- Linux内核追踪[4.14] 网络报文send的ZERO-COPY(零拷贝)
- MySQL常用命令备忘
- jsonp原理
- C++数据类型
- RUP的几大要素
- C语言 跳马 队列,广搜,结构体
- php访问mysql数据库