[关闭]
@liayun 2016-06-28T08:40:21.000000Z 字数 10594 阅读 1930

XML语言

JavaWeb


什么是XML

XML技术用于解决什么问题?

XML语言出现的根本目标在于描述上图那种,在现实生活中经常出现的有关系的数据。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <中国>
  3. <北京>
  4. <海淀></海淀>
  5. <朝阳></朝阳>
  6. </北京>
  7. <福建>
  8. <福州></福州>
  9. <龙岩></龙岩>
  10. </福建>
  11. <湖北>
  12. <武汉></武汉>
  13. <天门></天门>
  14. </湖北>
  15. </中国>

XML常见应用

XML语法

一个XML文件分为如下几部分内容:

XML语法-文档声明

元素

属性

注释

CDATA区

转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

特殊字符 替代符号
& &amp;
< &lt;
> &gt;
" &quot;
' &apos;

转义字符和CDATA区的区别:
一段XML文档,你要输出给人看,给人看到原始样子,要用转义;你要交给程序处理,把某一段xml文档作为原始内容交给程序处理,就用CDATA区

处理指令

XML约束

XML约束概述

DTD约束快束入门

DTD(Document Type Definition),全称为文档类型定义。
举例说明,有一个book.dtd文档如下:

  1. <!ELEMENT 书架 (书+)>
  2. <!ELEMENT 书 (书名,作者,售价)>
  3. <!ELEMENT 书名 (#PCDATA)>
  4. <!ELEMENT 作者 (#PCDATA)>
  5. <!ELEMENT 售价 (#PCDATA)>

注意:DTD文件应使用UTF-8或Unicode编码
那么按照此DTD约束,写出来的book.xml文档如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE 书架 SYSTEM "book.dtd">
  3. <书架>
  4. <书>
  5. <书名>Java就业培训教程</书名>
  6. <作者>张孝祥</作者>
  7. <售价>39.00元</售价>
  8. </书>
  9. <书>
  10. <书名>JavaScript网页开发</书名>
  11. <作者>张孝祥</作者>
  12. <售价>28.00元</售价>
  13. </书>
  14. </书架>

PCDATAparse character data(可解析的字符数据),说白了就是字符串。

编程校验XML文档正确性

IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

以上方法只是了解而已,谁还用这种方法啊!因为Eclipse就可以校验XML文档的正确性。

编写DTD约束的两种方式

DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。

在xml文件内编写DTD

以上例子是将DTD约束作为一个单独的文件进行编写,现在我们也可以在XML文件内编写。

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <!DOCTYPE 书架 [
  3. <!ELEMENT 书架 (书+)>
  4. <!ELEMENT 书 (书名,作者,售价)>
  5. <!ELEMENT 书名 (#PCDATA)>
  6. <!ELEMENT 作者 (#PCDATA)>
  7. <!ELEMENT 售价 (#PCDATA)>
  8. ]>
  9. <书架>
  10. <书>
  11. <书名>Java就业培训教程</书名>
  12. <作者>张孝祥</作者>
  13. <售价>39.00元</售价>
  14. </书>
  15. <书>
  16. <书名>JavaScript网页开发</书名>
  17. <作者>张孝祥</作者>
  18. <售价>28.00元</售价>
  19. </书>
  20. </书架>

引用DTD约束

XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

DTD约束语法细节

DTD的语法细节:元素定义

DTD的语法细节:属性定义

常用属性值类型

属性值类型→ENUMERATED

属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)。
例,

  1. <?xml version = "1.0" encoding="GB2312" standalone="yes"?>
  2. <!DOCTYPE 购物篮 [
  3. <!ELEMENT 肉 EMPTY>
  4. <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
  5. ]>
  6. <购物篮>
  7. <肉 品种="鱼肉"/>
  8. <肉 品种="牛肉"/>
  9. <肉/>
  10. </购物篮>
属性值类型→ID

表示属性的设置值为一个唯一值。ID属性的值只能由字母,下划线开始,不能出现空白字符。
例,

  1. <?xml version = "1.0" encoding="GB2312" ?>
  2. <!DOCTYPE 联系人列表[
  3. <!ELEMENT 联系人列表 ANY>
  4. <!ELEMENT 联系人(姓名,EMAIL)>
  5. <!ELEMENT 姓名(#PCDATA)>
  6. <!ELEMENT EMAIL(#PCDATA)>
  7. <!ATTLIST 联系人 编号 ID #REQUIRED>
  8. ]>
  9. <联系人列表>
  10. <联系人 编号="a1">
  11. <姓名>张三</姓名>
  12. <EMAIL>zhang@it315.org</EMAIL>
  13. </联系人>
  14. <联系人 编号="a2">
  15. <姓名>李四</姓名>
  16. <EMAIL>li@it315.org</EMAIL>
  17. </联系人>
  18. </联系人列表>

DTD的语法细节:实体定义

实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
实体可分为两种类型:引用实体和参数实体。

实体定义→引用实体
实体定义→参数实体

XML实例练习

根据以下产品目录DTD编写一个xml文档。
产品目录DTD:

  1. <!DOCTYPE CATALOG [
  2. <!ENTITY AUTHOR "John Doe">
  3. <!ENTITY COMPANY "JD Power Tools, Inc.">
  4. <!ENTITY EMAIL "jd@jd-tools.com">
  5. <!ELEMENT CATALOG (PRODUCT+)>
  6. <!ELEMENT PRODUCT
  7. (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
  8. <!ATTLIST PRODUCT
  9. NAME CDATA #IMPLIED
  10. CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
  11. PARTNUM CDATA #IMPLIED
  12. PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
  13. INVENTORY (InStock|Backordered|Discontinued) "InStock">
  14. <!ELEMENT SPECIFICATIONS (#PCDATA)>
  15. <!ATTLIST SPECIFICATIONS
  16. WEIGHT CDATA #IMPLIED
  17. POWER CDATA #IMPLIED>
  18. <!ELEMENT OPTIONS (#PCDATA)>
  19. <!ATTLIST OPTIONS
  20. FINISH (Metal|Polished|Matte) "Matte"
  21. ADAPTER (Included|Optional|NotApplicable) "Included"
  22. CASE (HardShell|Soft|NotApplicable) "HardShell">
  23. <!ELEMENT PRICE (#PCDATA)>
  24. <!ATTLIST PRICE
  25. MSRP CDATA #IMPLIED
  26. WHOLESALE CDATA #IMPLIED
  27. STREET CDATA #IMPLIED
  28. SHIPPING CDATA #IMPLIED>
  29. <!ELEMENT NOTES (#PCDATA)>
  30. ]>

在CATALOG.xml文件内编写DTD:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE CATALOG [
  3. <!ENTITY AUTHOR "John Doe">
  4. <!ENTITY COMPANY "JD Power Tools, Inc.">
  5. <!ENTITY EMAIL "jd@jd-tools.com">
  6. <!ELEMENT CATALOG (PRODUCT+)>
  7. <!ELEMENT PRODUCT
  8. (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
  9. <!ATTLIST PRODUCT
  10. NAME CDATA #IMPLIED
  11. CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
  12. PARTNUM CDATA #IMPLIED
  13. PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
  14. INVENTORY (InStock|Backordered|Discontinued) "InStock">
  15. <!ELEMENT SPECIFICATIONS (#PCDATA)>
  16. <!ATTLIST SPECIFICATIONS
  17. WEIGHT CDATA #IMPLIED
  18. POWER CDATA #IMPLIED>
  19. <!ELEMENT OPTIONS (#PCDATA)>
  20. <!ATTLIST OPTIONS
  21. FINISH (Metal|Polished|Matte) "Matte"
  22. ADAPTER (Included|Optional|NotApplicable) "Included"
  23. CASE (HardShell|Soft|NotApplicable) "HardShell">
  24. <!ELEMENT PRICE (#PCDATA)>
  25. <!ATTLIST PRICE
  26. MSRP CDATA #IMPLIED
  27. WHOLESALE CDATA #IMPLIED
  28. STREET CDATA #IMPLIED
  29. SHIPPING CDATA #IMPLIED>
  30. <!ELEMENT NOTES (#PCDATA)>
  31. ]>
  32. <CATALOG>
  33. <PRODUCT>
  34. <SPECIFICATIONS>aaaaa</SPECIFICATIONS>
  35. <OPTIONS>ccccc</OPTIONS>
  36. <PRICE>ddddd</PRICE>
  37. <NOTES>bbbbb</NOTES>
  38. </PRODUCT>
  39. </CATALOG>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注