前端之家收集整理的这篇文章主要介绍了
XML入门总结,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1、XML的作用
@H_301_5@1、存储和传输复杂的关系模型数据
@H_301_5@2、作为配置文件存在,XML中主要配置的一些具有复杂的层级关系的数据,而properties文件中主要配置一些key和value这样的数据
2、XML的语法
@H_301_5@1、文档声明
@H_301_5@<?xml ?>在尖括号里面书写标签的属性来声明当前的xml类型限定。
属性:版本号 字符编码 是否独立存在的xml文档
@H_301_5@<?xml version="1.0" encoding="编码表" standalone="yes|no" ?>
@H_301_5@2、元素(标签)
xml中的标签也分成单标签和双标签。注意在xml所有的标签必须闭合。xml中的标签区别大小写。
<a1> <A1>表示2个不同的标签。
xml中的标签可以嵌套,但是不能交差嵌套。
<a1><b1></b1></a1>
<a1><b1></a1></b1>
xml的标签只能有一个根标签。同时xml标签中的空白内容也会被解析成文本内容。
<网址>www.itcast.cn</网址>
标签不能以数字开始,不建议以下划线开始,同时在标签名中不要使用冒号。
标签名可以是中文,但是一定指定能够识别中文的码表。但不建议书写中文。
@H_301_5@3、属性
@H_301_5@在定义标签的时候,可以在标签上书写属性,属性是由key和value值组成。属性和值之间使用=连接,属性值可以使用单引号也可以使用双引号。
<input type="text" > </input>
@H_301_5@另外也可以使用字标签的形式来表示,比如上面的标签可以改成:
<input><type>text</type></input>
@H_301_5@4、CDATE
@H_301_5@在编写XML文件时,有些内容可能不想让解析引擎执行,而是当做原始内容处理。这时可以把这些内容放到CDATE区里。对于CDATE区域内的内容,XML解析程序不会处理,而是原封不动的输出。
语法:
<![CDATA[ 内容 ]]>
例如:
<![CDATA[
<itcast>
<br/>
</itcast>
]]>
@H_301_5@5、特殊指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="1.css"?>
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
@H_
301_5@3、DTD约束(一)
@H_301_5@1、约束介绍
@H_301_5@由于xml的标签是由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写。
@H_301_5@2、DTD例子
@H_301_5@①、先自己定义一个xml文件
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<name>zhangsan</name>
<age>23</age>
<addr>shanghai</addr>
</user>
<user>
<name>lisi</name>
<age>24</age>
<addr>beijing</addr>
</user>
</users>
@H_301_5@②、书写DTD文件来约束xml文件,DTD文件的拓展名为dtd,在xml中有多少个标签,就在dtd中书写多少个ELEMENT标签。
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT users (user+) >
<!ELEMENT user (name,age,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
@H_301_5@③、DTD引入方式
DTD主要用来约束xml文件,DTD可以单独写在文件中,也可以直接定义在xml中,可以在xml中引入第三方的公共DTD。
外部DTD的引入方式:外部DTD主要指的一个独立的DTD文件。
首先要书写DTD文件,然后在要被约束的xml文件中引入。
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
文档根结点 指的是当前xml中的根标签。
SYSTEM 引入的系统中存在文件
"DTD文件的URL" DTD存放的位置
引入公共的DTD:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
文档根结点 指的是当前xml中的根标签。
PUBLIC 表示当前引入的DTD是公共的DTD
例如:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
在xml中直接书写DTD
<!DOCTYPE 根标签名 [
具体的标签的约束
]>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users[
<!ELEMENT users (user+) >
<!ELEMENT user (name,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT addr (#PCDATA) >
]>
<users>
<user>
<name>zhangsan</name>
<age>23</age>
<addr>shanghai</addr>
</user>
<user>
<name>lisi</name>
<age>24</age>
<addr>beijing</addr>
</user>
</users>
@H_
301_5@4、DTD约束(二)
@H_301_5@1、DTD语法
@H_301_5@①元素
当定义DTD约束xml时候,这时需要在DTD中使用ELEMENT来定义当前xml中可以出现的标签名称。
格式:
<!ELEMENT 标签名 约束> 约束来限定当前标签中可以有的子标签,或者当前标签中可以书写的内容
在定义标签名的时候,约束中可以使用一些符号标签具体出现次数
? 零次或者一次
* 零次或者多次
+ 一次或者多次 users (user+) 表示当前的users标签下可以有一个或者多个user标签,用来限定当前的子标签出现的顺序user (name,addr) user标签下只能有name age addr 子标签
并且必须按照name age addr的顺序书写
| user (name|age,addr) user下可以name或者age ,但必须有addr,并且addr必须name或age后面
#PCDATA 表明该元素可包含任何字符数据,但不能在其中包含任何子元素。
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明
EMPTY 表明该元素不能有任何子元素或文本,仅可以使用属性。
<!ELEMENT age EMPTY > 当前的age标签是个空标签,它不能有文本内容。
ANY 表明该元素中可以包含任何DTD中定义的元素内容
如:<!ELEMENT note ANY>
@H_301_5@②、属性
@H_301_5@在xml中的标签上是可以书写属性的,在DTD中就需要对属性进行约束。
格式:
@H_301_5@<!ATTLIST 标签名 属性名 属性的类型 属性的约束>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users[
<!ELEMENT users (user+) >
<!ELEMENT user (name,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age EMPTY >
<!ELEMENT addr (#PCDATA) >
<!ATTLIST user id ID #required >
<!-- 表示user标签里必须有一个id属性值 -->
]>
@H_301_5@如果一个标签上有多个属性
<!ATTLIST 标签名
@H_301_5@ 属性名 属性的类型 属性的约束
属性名 属性的类型 属性的约束
属性名 属性的类型 属性的约束
>
@H_301_5@使用:
@H_301_5@<标签名 属性1=”” 属性2=”” 属性3=”” >
@H_301_5@属性的类型:
CDATA 属性的value值可以是文本数据
(值1 | 值2 | 值3.... ) 表示当前的属性的value值只能是当前括号中的值
ID 表示唯一。对当前标签上的id属性进行限定,并且同一个xml中id不能重复
类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值
@H_301_5@属性的约束:
#required 属性是必须书写的
#Implied 属性是可选得
#fixed value 属性的value是固定的值,“值”代表属性的默认值。所以可以省略。
user name CDATA fixed “zhangsan”
<user name=”zhangsan”>
或者
user name CDATA “张三”
<user />
@H_301_5@属性的类型和约束的组合:
CDATA required
CDATA Implied
CDATA fixed
CDATA “值”
(值1 | 值2 | 值3.... ) required
@H_301_5@例如:
user id ID #required
@H_301_5@③、实体
@H_301_5@实体用于为一段内容创建一个别名,以后再xml文档中就可以使用别名引用这段内容了
@H_301_5@在DTD定义中,一条<!ENTITY ..>语句用于定义一个实体
@H_301_5@实体可以理解成Java预定义好的一个常量,然后xml文件中就可以引入当前这个定义的实体。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users[
<!ELEMENT users (user+) >
<!ELEMENT user (name,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age EMPTY >
<!ELEMENT addr (#PCDATA) >
<!ATTLIST user id ID #required >
<!ENTITY abc "上海传智播客123123">
]>
<users>
<user id="u001">
<name>zhangsan</name>
<age></age>
<addr>&abc;</addr>
</user>
<user id="u002">
<name>lisi</name>
<age/>
<addr>&abc;</addr>
</user>
</users>
@H_
301_5@5、Schema约束
@H_301_5@1、xml Schema介绍
@H_301_5@DTD缺点:一个xml中只能引入一个DTD
@H_301_5@ DTD无法对属性以及标签中的数据做数据类型的限定
@H_301_5@Schema是用来代替DTD来约束xml的,拓展名.xsd,根元素为Schema
@H_301_5@2、Schema例子
@H_301_5@①、书写xml文件
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>JavaWEB</name>
<author>老毕</author>
<price>182</price>
</book>
<book>
<name>SSH</name>
<author>老于</author>
<price>152</price>
</book>
</books>
@H_301_5@②、定义Schema文件
@H_301_5@在定义Schema文件的时候,由于Schema文件本身就是xml,它也要受到别的约束,而这个约束W3C组织提前定义好的。
@H_301_5@在Schema文件中需要引入进来在根标签中使用属性进行进入:
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
<schema xmlns="http://www.w3.org/2001/XMLSchema" 引入W3C定义的schema书写的规范
targetNamespace="http://www.itcast.org/book" 给当前的Schema文件起名字(命名空间)作用是当哪个xml要
引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入
@H_301_5@完整的Schema文件如下
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.org/book"
elementFormDefault="qualified">
<element name="books">
<complexType>
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name"></element>
<element name="author"></element>
<element name="price"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
@H_301_5@③、在xml文件中引入Schema
<books xmlns="http://www.itcast.org/book" 它是schema文件中的targetNamespace 属性后面的值
xsi:schemaLocation="http://www.itcast.org/book book.xsd" 引入当前的schema文件的真实路径
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 说明当前的xml是schema一个实例文档
>