什么是XML?
w3c推出xml技术本来是想要替代html,然而一直没有成功,结果是过渡诞生了xhtml技术。
XML常见应用
**
XML语法
编码乱码问题
如下一段XML代码:
<?xml version="1.0" encoding="utf-8" ?>
<xml>
<![CDATA[
<b>
<a>中国</a>
</b>
]]>
<b>
<a>美国</a>
<a>小日本</a>
</b>
</xml>
如果用记事本这段XML代码,保存的时候默认是ANSI编码方式保存,然而代码中encoding="utf-8"
指定浏览器用utf-8编码去解析,所以这样会导致在浏览中出现乱码。为什么在eclipse等工具中可以正常,那是因为eclipse中新建xml文件保存的时候默认会和encoding
的指定的编码方式一致。
Tip:处理指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。 <?xml-stylesheet type=”text/css” href=”1.css”?>
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
XML约束
DTD,全称为文档类型定义
文件清单:book.dtd
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
文件清单:book.xml
<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
DTD语法细节:元素定义1
- 在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:
<!ELEMENT 元素名称 元素类型>- 元素类型可以是元素内容、或类型
- 如为元素内容:则需要使用()括起来,如
<!ELEMENT 书架 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>- 如为元素类型,则直接书写,DTD规范定义了如下几种类型:
EMPTY:用于定义空元素,例如<br/> <hr/>
ANY:表示元素内容为任意类型。
DTD语法细节:元素定义2
- 元素内容中可以使用如下方式,描述内容的组成关系
- 用逗号分隔,表示内容的出现顺序必须与声明时一致。<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>
- 用|分隔,表示任选其一,即多个只能出现一个
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>- 元素内容使用空白符分隔,表示出现顺序没有要求:<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> *
- 在元素内容中也可以使用+、*、?等符号表示元素出现的次数:
+: 一次或多次 (书+)
?: 0次或一次 (书?)
: 0次或多次 (书)- 也可使用圆括号( )批量设置,例
<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
XML编程(CRUD)
CRUD:create、read、update、delete
XML解析方式分为两种:dom和sax
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
(1. dom解析的优点是对文档crud比较方便,缺点是占用内存比较大)
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
(2. sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud)XML解析器
Crimson、Xerces 、Aelfred2XML解析开发包
Jaxp、Jdom、dom4j