XML基础

XML基础

引言:

  • 由于操作系统储存数据格式不兼容,进行数据传输时,较困难。

  • W3C退出XML,它是一种通用的数据交换格式。

  • XML英文Extensible Markup Language-可扩展标记语言。

  • 便于保存树状结构的数据。

(一)HTML与XML区别

  • HTML标记显示数据,XML标记描述数据的性质和结构。

  • HTML不区分大小写,XML严格区分。

  • HTML可有多个根元素,XML只能有一个。

  • HTML属性值引号可用可不用,XML必须用。

  • HTML空格自动过滤,XML空格不会被自动删除。

  • HTML标记预定义,XML标记可随意定义,并且可扩展。

  • 注:XML不是HTML升级,也不是替代品。

(二)XML语法

(1)文档声明(必须位于第一行,前面不允许有任何字符)

<?xml|版本信息[编码信息][文档独立性]?>
<?xml version="1.0" encoding="gb2312" standalone"yes"?>
  • 对于含有中文的HTML文档,采用unicode或者GB2312(中文字符编码)编码。
  • XML文档使用编码方式和声明中的encoding必须一致。

例子

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<书架>
	<>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>58.00RMB</售价>
	</>
	<>
		<书名>EJB3.0入门经典</书名>
		<作者>黎活明</作者>
		<售价>39.00RMB</售价>
	</>
</书架>

亲测:

  • 本人用的IE11.0,所以可以正常打开。

  • IE9.0一下版本不可正常打开此文件,谷歌浏览器可以。

    原因:

    IE浏览器在解析过程中,遇到没有指定编码的文件,浏览器默认用Unicode编码解析文档,而文档中字符使用的时GB2312编码,不是Unicode编码。

    解决方案:

    文件另存为时,选择UFT-8编码进行保存。IE可解析。

(2)注释

<!--注释信息-->

要点

  • 注释不能出现XML声明之前。
  • 不能出现在标记中。
  • 字符串“–”不能再注释中出现。
  • XML中,不可以注释以“—>”结尾。
  • 注释不能嵌套

(3)特殊字符处理

特殊字符预定义实体
&&amp
<&lt
>&gt
&quot
&apos
<?xml version="1.0" standalone="no"?>
<!--注释信息-->
<书架>
	<>
		<!-- 如下 -->
		<书名>&lt;Java就业培训教程&gt;</书名>
		<作者>张孝祥</作者>
		<售价>58.00RMB</售价>
	</>
</书架>

(4)CDATA区

<?xml version="1.0"?>
<java>
    <![CDATA[

		if(a>b&&c<b)

			max=a;
]]>
</java>

(三)DTD约束

(1)约束形式

  • 嵌入式DTD约束
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架[
	<!ELEMENT 书架 (书+)>
	<!ELEMENT 书架 (书,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
	<>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>58.00RMB</售价>
	</>
	<>
		<书名>EJB3.0入门经典</书名>
		<作者>黎活明</作者>
		<售价>39.00RMB</售价>
	</>
</书架>
  • 外部引用DTD约束
<!--第一种方式-本地-->
<!DOCTYPE 根目录名称 SYSTEM "外部DTD文件的URL">
<!--第二种方式-远程-->
<!DOCTYPE 根目录名称 PUBLIC "DTD名称" "外部DTD文件的URL">
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--本地约束-->
<!DOCTYPE 书架 SYSTEM "引入dtd.dtd">
<!--外部约束-->
<!--<!DOCTYPE 根目录名称 PUBLIC "DTD名称" "外部DTD文件的URL">-->
<书架>
	<>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>58.00RMB</售价>
	</>
	<>
		<书名>EJB3.0入门经典</书名>
		<作者>黎活明</作者>
		<售价>39.00RMB</售价>
	</>
</书架>

(2)DTD语法

  • #PCDATA:内容为普通文本字符串
  • 子元素:元素包含元素
  • 混合内容:便是元素可以包含字符和子元素
  • EMPTY:空元素
  • ANY:任意元素
字符出现形式
[?]该对象出现0次或1次
[*]出现0次或多次
[+]出现1次或多次
[|]表示列出对象的1个
[,]表示对象必须按照指定的顺序出现
[()]用于元素分组

(1)属性定义

<ATTLIST 元素名
	属性名1 属性类型 设置说明
	属性名2 属性类型 设置说明
>
  • #REQUIREO:表示属性是必须的
  • #IMPLIED:表示元素可以包含该属性,可以以不包含该属性。
  • #FIXED:表示一个固定的属性默认值,在XML文档中不能将该属性设置为其他值。
  • 默认值:和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DYD中定义的默认值。

(2)属性类型

  1. CDATA-字符数据Charactor Data
  2. Enumerated(枚举类型)-限制属性的取值只能从一个列表中选择。DTD定义中不会出现Enumerated。
如何定义一个Enumerated类型的属性。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 购物篮 [
	<!ELEMENT 购物篮 ANY>
	<!ELEMENT  EMPTY>
	<!-- 枚举类型(注意空格) -->
	<!ATTLIST  品种 (鸡肉|牛肉|猪肉|鱼肉) "鸡肉">
]>
<购物篮>
    < 品种="鱼肉"/>
    < 品种="牛肉"/>
    </>
</购物篮>

(3)ID

一个ID类型的属性用于 唯一便是XML文档中的一个元素 其属性值必须遵守XML名称定义的规则。一个属性只能由一个ID类型给的属性,而且ID属性的属性必须设置为#IMPLIED或者#REQUIRED

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 联系人列表[
	<!ELEMENT 联系人列表 ANY>
	<!ELEMENT 联系人 (姓名,EMAIL)>
	<!ELEMENT 姓名 (#PCDATA)>
	<!ELEMENT EMAIL (#PCDATA)>
     <!-- ID类型(注意空格) -->
	<!ATTLIST 联系人 编号 ID #REQUIRED>
]>
<联系人列表>
	<联系人 编号="id1">
		<姓名>张三</姓名>
		<EMAIL>zhang@itcast.cn</EMAIL>
	</联系人>
	<联系人 编号="id2">
		<姓名>李四</姓名>
		<EMAIL>li@itcast.cn</EMAIL>
	</联系人>
</联系人列表>

(4)IDREF和IDREFS

  • IDREF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 联系人列表[
	<!ELEMENT 联系人列表 ANY>
	<!ELEMENT 联系人 (姓名,EMAIL)>
	<!ELEMENT 姓名 (#PCDATA)>
	<!ELEMENT EMAIL (#PCDATA)>
	<!-- ID类型(注意空格) -->
	<!ATTLIST 联系人 编号 ID #REQUIRED
            		上司 IDREF #REQUIRED>
]>
<联系人列表>
	<联系人 编号="id1">
		<姓名>张三</姓名>
		<EMAIL>zhang@itcast.cn</EMAIL>
	</联系人>
	<!--下面一行是IDREF-->
	<联系人 编号="id1" 上司="id2">
		<姓名>李四</姓名>
		<EMAIL>li@itcast.cn</EMAIL>
	</联系人>
</联系人列表>
  • IDREFS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 联系人列表[
	<!ELEMENT 联系人列表 ANY>
	<!ELEMENT 联系人 (姓名,EMAIL)>
	<!ELEMENT 姓名 (#PCDATA)>
	<!ELEMENT EMAIL (#PCDATA)>
	<!-- ID类型(注意空格) -->
	<!ATTLIST 联系人 编号 ID #REQUIRED
            		上司 IDREF #REQUIRED>
]>
<联系人列表>
	<联系人 编号="id1">
		<姓名>张三</姓名>
		<EMAIL>zhang@itcast.cn</EMAIL>
	</联系人>
	<联系人 编号="id3">
		<姓名>王五</姓名>
		<EMAIL>wang@itcast.cn</EMAIL>
	</联系人>
	<!--下面一行是IDREFS-->
	<联系人 编号="id1" 上司="id2 id3">
		<姓名>李四</姓名>
		<EMAIL>li@itcast.cn</EMAIL>
	</联系人>
</联系人列表>

(5)NMTOKEN和NMTOKENS

(6)NOTATION

<!NOTATION 符号名 SYSTEM "MIME类型">
<!NOTATION 符号名 SYSTEM "URL路径名">
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 文件[
    <!NOTATION wy SYSTEM "网易云音乐.exe">
    <!NOTATION kg SYSTEM "酷狗音乐.exe">
    <!ELEMENT 文件 ANY>
    <!ELEMENT 音乐 EMPTY>
    <!ATTLIST 音乐 演示设备 NOTATION (wy|kg) #REQUIRED>
]>
	<文件>
		<电影 演示设备="wy"/>
	</文件>

(7)ENTITY和ENTITYS

  • ENTITY
<!ENTITY itcast "传智播客论坛交流群,www.ticast.cn">
<!ELEMENT 电影 EMPTY>
<!ATTLIST 电影 来源 ENTITY #REQUIRED>
<电影 来源="&itcast; "/>
  • ENTITYS
<!ENTITY itcast "传智播客论坛交流群,www.ticast.cn">
<!ENTITY oldcast "老男孩论坛交流群,www.laonanhai.cn">
<!ATTLIST 网址 来源 ENTITYS #REQUIRED>
<img src="itcast oldcast">

(三)实体定义

(1)引用实体

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<>
		<书名>Java就业培训教程</书名>
        <作者>&itcast;</作者>
        <售价>59.9</售价>
	</>
    <>
		<书名>EJB3.0入门经典</书名>
        <作者>黎活明</作者>
        <售价>39.0</售价>
	</>
</书架>

dtd

<!ELTITY itcast "传智播客官网,www.ticast.cn">
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
(2)参数实体
<!ENTITY % 实体名称 "实体内容">
例子
<!ENTITY % TAG_NAME "姓名|EMAIL|电话|地址">
<!ELEMENT 个人信息 (%TAG_NAME;|生日)>
<!ELEMENT 客户信息 (%TAG_NAME;|公司名)>

(四)Schema约束

(1)Schema文档
<?xml version="1.0"?>
<!--根元素为xs:schema-->
<xs:schema xmlns:xs="url">
    <!--名称空间(<元素名 xmlns:prefixname="url">)-->
	<xs:element name="root" type="xs.string"/>
</xs:schema>
(2)名称空间
<元素名 xmlns:prefixname="url">
 <!--xmlna:prefixname值得是该元素的属性名,对应值为一个url的引用,标识该空间-->
  • 每个元素前面加名称空间
<?xml version="1.0" encoding="utf-8"?>
<it315:书架 xmlns:it315="url">
	<it315:>
        <it315:书名>JavaScript网页开发</it315:书名>
         <it315:作者>张孝祥</it315:作者>
         <it315:售价>28.00</it315:售价>
    </it315:>    
</it315:书架>
  • 默认名称空间
  • <?xml version="1.0" encoding="utf-8"?>
    <书架 xmlns="url"><!--默认名称空间,每个元素前面不用写-->
        <>
            <书名>JavaScript 网页开发</书名>
            <作者>张孝祥</作者>
            <售价>28.00</售价>
        </>
    </书架>
    
(3)Schema文档的引入
  1. 文档的引入需要通过属性 xsi:schemaLocation由名称空间url定义
  2. 属性中包括两个url 用空白符隔开,第二个是url的文档位置,第二个是url的名称空间的名称。
<?xml version="1.0" encoding="utf-8"?>
<书架 xmlns="url"----------------------------------------------名称空间
    xmlns:xsi="http://www.w3.org/2001/XMKSchema-instance"------xsi的位置
    xsi:schemaLocation="url2----------------------------------Schema的位置
    	url3"---------------------------------------------------Schema的名称
    ><!--名称空间-->
</书架>
  • 不引入写法
<?xml version="1.0" encoding="utf-8"?>
<书架 xmlns:xsi="url"
    xsi:noNamespaceSchemaLocation="xmbook.xsd">
    <>
        <书名>Java</书名>
        <作者>张孝祥</作者>
        <售价>28.00</售价>
        </>
</书架>

(4)Schema语法

1.元素定义
<xs:element name="xxx" type="yyy">

2.元素类型

语法类型
xs:decimal小数
xs:string字符串
xs:integer整数
xs:boolean布尔型
xs:data日期
xs:time时间
代码示例
<xs:element name="sun" type="xs:string"/>
<xs:element age="21" type="xs:integer"/>
<xs:element dateborn="1999-01-05" type="xs:data"/>
结果
<name>sun</name>
<age>21</age>
<databorn>1999-01-05</databorn>
加语言
<xs:attribute name="lang">
3.简单类型

(1)xs:minInclusive 和xs:maxInclusive元素对值的限定

<xs:element name="age">
    <xs:simpleType>
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="18"/>
            <xs:maxInclusive value="58">
        </xs:restriction>
    </xs:simpleType>
</xs:element>

(2)xs:enumberation元素对一组值的限定

<xs:element name="car">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumberation value="Audi"/>
            <xs:enumberation value="Golf">
            <xs:enumberation value="BMW">
        </xs:restriction>
    </xs:simpleType>
</xs:element>

(3)xs:pattern元素对一系列值的限定

<xs:element name="letter">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

(4)xs:restriction元素对空白字符的限定

<xs:element name="address">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/><!--三个属性值 preserve replace collapse-->
        </xs:restriction>
    </xs:simpleType>
</xs:element>

4.复杂类型

(1)空元素

<xs:element name="product">
    <xs:complexType>
            <xs:attribute name="prodid" type="xs:positiveInteger"/>
    </xs:complexType>
</xs:element>

(2)包含其他元素的元素

<xs:element name="persion">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="firstname" type="xs:string"/>
            <xs:element name="lastname" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

(3)仅包含文本的元素

<xs:element name="shoesize">
    <xs:complexType>
        <xs:extension base="xs:integer">
            <xs:attribute name="country" type="xs:string" />
        </xs:extension>
    </xs:complexType>
</xs:element>

(4)包含元素和文本的元素

<xs:element name="letter">
    <xs:complexType mixed="true">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="orderid" type="xs:positveInteger"/>
            <xs:element name="shipdate" type+"xs:date"/>
        </xs:sequence>
    </xs:complexType></xs:complexType>
</xs:element>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值