首先来介绍一下XML所包含的内容:
XML(eXtensible Markup Language)-描述事物本身
XSL (eXtensible Stylesheet Language)-修饰XML
DTD (Docment Type Definition)-约定xml的标签
Schema-约定xml标签和类型
简单举一个例子,介绍一下XML的语法:
<!-- XML Declaration -->
<?xml version="1.0" encoding="GBK"?>
<person-info>
<student>
<id>001</id>
<name>张三</name>
</student>
<!-- 这是李老师 commnets 属性必须包引号 -->
<teacher id="10" name="李四"/>
<student id="11" name="王五"> <desc>
<!--CDATA区 用来表示格式数据,如:可以放入一片文章 -->
<![CDATA[
这个学生来自...,他已经学习了<<Java编程思想>>
]]>
</desc>
</student>
<student></student>
<student/>
</person-info>
再介绍一下命名空间,如例子所示
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
JAVA可利用XML进行数据交换,JSM (Java Message Service);
SML(eXtsnsible Stylesheet Language) -修饰XML
XSLT t--Transformation ,例如:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<学生信息>
<学校>Soft</学校>
<学生>
<编号>0001</编号>
<姓名>张三</姓名>
<性别>男</性别>
<年龄>23</年龄>
</学生>
<学生>
<编号>0002</编号>
<姓名>李斯</姓名>
<性别>女</性别>
<年龄>25</年龄>
</学生>
</学生信息>
SML文件:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head><title>学生信息</title></head>
<body>
<div align="center"><p>
<xsl:value-of select="*/学校"/>
</p></div>
<xsl:apply-templates select="学生信息"/>
</body>
</html>
</xsl:template>
<xsl:template match="学生信息">
<p align="center">
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<xsl:for-each select="学生">
<tr>
<td><xsl:value-of select="编号"/></td>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="年龄"/></td>
</tr>
</xsl:for-each>
</table>
</p>
</xsl:template>
</xsl:stylesheet>
DTD实例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE 丛书 SYSTEM "book.dtd">
<丛书>
<书>
<名>萍踪侠影</名>
<人>梁羽生</人>
<价 unit="RMB">100.60</价>
</书>
<书>
<名>岳阳楼记</名>
<人>范仲淹</人>
<价 unit="美元">76.8</价>
</书>
</丛书>
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT 丛书 (书*)>
<!ELEMENT 书 (名,人+,价*)>
<!ELEMENT 名 (#PCDATA)>
<!ELEMENT 人 (#PCDATA)>
<!ELEMENT 价 (#PCDATA)>
<!ATTLIST 价
unit (RMB|美元|日元) 'RMB'>
1、逗号间隔表示严格按照顺序,空格间隔元素可以不按照顺序
2、+代表至少出现一次
3、*表示出现0或多次
4、没有+或*的修饰表示必须出现一次
Schema 约定XML标签和类型:
<?xml version="1.0" encoding="gb2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="从书">
<xs:complexType>
<xs:sequence>
<xs:element name="书">
<xs:element name="名" minoccurs="1"></xs:element>
<xs:element name="人"></xs:element>
<xs:element name="价">
<xs:attribute name="unit">
<xs:enumeration value="RMB"/>
<xs:enumeration value="美元"/>
<xs:enumeration value="日元"/>
</xs:attribute>
</xs:element>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
两种不同的XML分析模型
DOM—DOM是面向模型的,一次将XML文档加入内存,编程简单,适合小型文件的解析
SAX —SAX是面向事件的,读一部分解析以部分,编程复杂一些,适合大型文件的解析