XML的全称是"Extensible Markup Language",是可扩展的标记语言。为什么说它是可扩展的?它又扩展谁?其实它由标准通用标记语言(Standard Generalized Markup Language,SGML)扩展而来的,XML是SGML的简化版本。
SGML功能非常强大,可以定义标记语言的元语言。由于它非常复杂,不适合在Web上应用,所以将其扩展为在互联网上应用的XML语言。
HTML是一种标记语言,在HTML里面有很多标记,而XML允许创建自己的标记。XML并不是标记语言,它是用来创建标记语言的元语言。XML不是HTML的替代品,也不是HTML的升级,它只是HTML的补充,为HTML扩展更多的功能。
XML用来定义类似HTML的标记语言,然后再用这个标记来显示信息。那么XML有什么优点呢?
现在网络应用越来越广泛,仅靠HTML单一的文件类型,处理千变万化的文档和数据已经力不从心。HTML的语法十分不严谨,而XML作为Web 2.0必需的数据传输和交互工具,其语法非常严谨。XML使得在网络上使用SGML语言变得更加简单和直接。
<html> <head> <!--设置标题--> <tit1e>静夜思</title> </head> <body> <!--输出标题文字--> <h2) <Font size=3 Color="read">静夜思</Font> </h2> <!--输出普通文字--> <b>作者:李白</b><br> <hr Color="blue"> <!--输出段落文字--> <p> <b><i> <Font size=3 Color="green"> 床前明月光,疑是地上霜。 <br> 举头望明月,低头思故乡。 </Font> </i> </b> </body> </html>
<?xml version="1.0" encoding="gb2312"?> <人物> 令狐冲 <!--这是一个令无数少女为之倾倒的偶像--> <籍贯>华山</籍贯> <性别>男</性别> <年龄>24</年龄> </人物>
通过上面两个实例可以看出,HTML必须按照规定的标签书写,不能够自己创造。而XML中可以自己创造标签。
XML文档由实体(存储单元)组成,用来定义标签的标记语言,可用来定义自己所需要的标签集。HTML只支持英文标签,而XML可以支持多种语言的标签。
现在把整个文档进行划分,可以看出一个文档(包括HTML文档)总共分为3个部分,也可以说是3大要素,即文档数据、文档结构、文档样式。
下面以HTML为例分析文档的3要素。
<table border=2 align=center> //文档样式 <caption>清华大学菜价表</caption> <tr> <td align=center>鱼香肉丝</td> <td align=center>3.50</td> //文档数据 </tr> </table> //文档结构为了能够让XML的文档具有可读性,XML文档采取了数据与文档样式分离的原则。XML文档只提供数据,而XSL包括数据样式,文档的结构则使用DTD。
在一个完整的XML文档中必须包含一个XML文档声明,该声明必须位于文档的第一行。
这个声明表示该文档是一个XML文档,以及遵循的是哪个XML版本的规范。那么如何进行声明呢?声明的语法如下:
<?xml 版本信息 (编码信息) (文档独立性信息) ?>
<?xm1 version=1.0 encoding="gb2312" standalone="yes"?>
在介绍文档类型声明时,涉及一个概念:DTD。所谓DTD ,就是一种保证XML文档格式正确的有效方法,可以通过校验XML文档内容来验证其是否符合规范,元素和标签使用是否正确,这就是DTD的作用。
文档类型的声明共有两种:
口在其他文件中定义文档类型。
<!DocTYPE MYDOC SYSTEM "mydoc .dtd">此句指出该文档类型名为MYDOC,这时如果对文档结构不是很清楚,必须要查询"mydoc.dtd”文档才能知道。
<!DocTYPE BIRDS [<!ELEMENT AUCTIONBLOCK(ITEM,BIRDS)>]>上述代码像前面的实例一样,直接在XML文档中定义文档结构。
与HTML一样,XML文档的主体内容部分也是由元素构成的,一个XML元素由一个标记来定义。为了让读者能更好地掌握元素,在讲述每个元素内容时,都会配有相应实例。
<BID ID=200138> <PRICE>60000</PRICE> <TIME>3:00:00</TIME> </B工D>
字符数据段="<![CDATA["+字符数据+"]]>"例子:
<?xml version=1.0 encoding="gb2312"?> <root> <![CDATA[<html><head></head><body>我是一个优秀的程序员</body></html> ]]> </root>"<html><head></head><body>我是一个优秀的程序员</body></html>"就是一个字符数据段。
口实体引用:“&”+实体引用名+“:”。例如:&company 口字符引用:“&#”+字符的十六进制或十进制的ASCII值+“;”。例如:®下面是有关引用的实例。
<?xml version=1 .0 encoding="gb2312"?> <!DOCTYPE 就业信息(<!ENTITY company "上海嘉鉴信息技术有限公司">]> <就业信息> <公司名称>&company</公司名称> </就业信息>
注释比较简单.它在代码中所占的重要性.只不过是对代码的一种解释。但是希望读者能养成一种习惯,就是写代码时,要记住在代码旁边给予一定的注释、这样写出来的代码段就比较较容易被他人阅读。注释的格式如下:
<!--注释的内容-->
处理指令允许文档中包含由应用程序来处理的指令。即在XML文档中,可能会包含一些非XML格式的数据,这些数据XML无法处理,此时就可以使用处理指令,调用其他的程序来
处理这些数据。例如要处理Excel/CSS
处理指令的语法是以“<?”开头,以“?>”结尾。下面是一个常见的处理指令的实例:
<?xm1-stylesheet href="hello.css" type="text/css"?>
此处的"xml-stylesheet"就是处理指令,它调用Execl或者使用css来处理表格数据,因为这些数据XML无法处理。
在XML文档中,可以在元素中使用一个特殊的属性“xml:space",来通知应用程序保留此元素的空白,在使用时必须要进行声明。"xml:space"属性必须被声明为Enumerated(枚举)类型,它的值必须是"default"和"preserve"两者之一,或者是两者都取。
口default:表示对此元素使用应用程序的默认空白处理模式。
口preserve:指示应用程序保留所有的空白
如果一个元素使用了"xml:space"属性,将适用于该元素内容中的所有元素,除非被另一个个"xml:space"属性的实例所覆盖。
在XML空白字符中,有两个标准的ASCII码行尾控制字符,一个是回车(#xA ),一个是换行(#xD)。在XML处理器解析前,要将所有的两字符序列##xD#xA以及单独的字符都转换成#xA
在文档处理中,标识出其内容所使用的自然或人工语言,非常有用。可以在文档中插入一个属性"xml:lang",来指定文档所使用的语言。
"xml:lang"属性一旦设定,将适合于它所在元素中的所有属性及元素的内客,除非被元素内容中另一个元素的"xml:lang"属性所覆盖。
什么才是格式良好的XML文档呢?如果一个XML文档有且只有一个根元素,符合XML元素的嵌套规则,满足XML规范中所定义的所有格式正确性的约束,每一个已分析实体都格式正确,称之为格式良好的XML文档。
那么需要满足什么样的格式约束才算格式良好的XML,下面给出了详细的说明。
(l)文档必须从XML声明开始。
口XML声明必须位于该文件的最开始位置。
口XML必须紧跟在"<?"之后,中间不能有空格等字符。
(2)唯一的根元素。
口根元素必须唯一。
口根元素嵌套其他所有的后代元素。
口根元素必须有起始标签和结束标签。
口XML文档中的其他非元素节点不一定包含在根元素中。
(3)标签必须是闭合的。
起始标签必须有一个相应的结束标签与之对应。
(4)空标签的约定。
口空标签必须用"/>"来结束。
口空标签可以带有属性。
(5)层层嵌套。
口子元素必须嵌套在父元素内,不能互相交错。
口同层元素必须互相并列,不能互相嵌套。
(6)区分大小写。
起始标签与结束标签大小写必须要分清。
(7)属性设定。
属性赋值时都必须使用引号。
(8)特殊的字符表示法。
预定义实体用实体引用方式。
如果能够满足以上所列出的内容,可以说这篇XML算是格式良好的XML。其实以上列出来的所有项,都是有关语法方面的注意点。XML对语法的要求比较严格,希望读者能够按照相关的语法规则编写XML文档。
DTD (Documnet Type Definition)就是一个规范XML文档结构的文档,其实,它起着规范XML中数据的数据结构的作用。下面将详细讲述如何编写DTD文档。DTD的定义是什么呢?通过以下的说明,学习DTD的规范。
(I)文档类型的定义:定义允许什么或不允许什么在文档中出现。预先规定文档中元素的结构、属性类型和实体引用等,可直接在文档中定义DTD,或引用外部DTD。DTD不一定是必需的,在需要的时候可以定义DTD。
(2) DTD的调用:合法的XML文档必须遵循某一类文档的结构声明,一旦声明就会与此类文档相应结构关联起来。DTD的调用就是指定文档使用什么样的DTD,它出现在文档的XML声明后,基本元素之前。DTD可以包含在XML文档中,也可以在外部定义,然后在XML文档中直接引用。
<?xml version="1.0" encoding="gb2312" standalone="yes"?> <!Docutppe 就业信息[<!ELEMENT 就业信息 (#PCDATA)>]> <!-内部定义DTD文件一> <就业信息> 暂无信息 </就业信息>
文件名:Jobinfo.dtd <!ELEMENT Jobinfo(#PCDATA)> <?xml version="1.0" encoding="gb2312" standalone="yes"?> <!DOCTYPE Jobinfo SYSTEM "JObinfo.dtd"><卜外部DTD文件一> <就业信息> 暂无信息 </就业信息>
对于程序员来说,无须自己编写DTD文件和掌握DTD的完整语法,只需要建立对DTD文档的直观认识就可以。为了能够让读者对DTD文档有个大概的了解,下面将简单介绍关于DTD文档的结构,包括元素类型的声明、属性表的声明、实体的声明、记号的声明。
Dorn4jApp.java
public class Dom4jApp{ public Dom4jApp()//构造函数 { } public static void parseXML()//解析XML文件 { SAXReader parser=new SAXReader();//获取解析对象 try{ Document doc=parser.read(new File("depts.xml")); //获取和输出根元素 Element root=doc.getRootElement();//获取根元素对象 String rootName=root.getName();//获取根元素对象名称 System.out.println(rootName);//输出根元素名称 //获取和输出儿子元素 List<Element> list=root.elements();//获取根元素下的儿子对象 //遍历根元素下的儿子对象 for(Element e:list) { String eName=e.getName();//获取儿子对象的名字 System.out.println(eName);//输出儿子对象的名称 List<Attribute> atts=e.attributes();//获取当前儿子的属性对象 //遍历儿子对象的属性 for(Attribute att:atts) { String attName=att.getName();//获取属性的名字 String attValue=att.getValue();//获取属性的值 System.out.println(attName+"--"+attValue); } //获取和输出孙子对象 Iterator<Element> iter=e.elementIterator()://获取孙子对象 //遍历孙子对象 while(iter.hasNext()) { Element child=iter.next(); String childName=child.getName();//获取孙子对象名称 String childText=child.getText();//获取孙子元素的内容 System.out.println(childName+"---"+childText); } } }catch(Exception e){ e .printStackTrace(); } } public static void main(String[]args)//主函数 { parseXML();//调用parseXML方法 } }
<?xml version="1.0" encoding="GBK"?> <depts> <dept deptid="1"> <!--编号为1的部门记录--> <deptname>行政部</deptname> <deptnum>20</deptnum> <deptdesc>行政相关</deptdesc> </dept> </depts>
答:它们之间有着很多共同点和不同点。下面具体分析。
口XML不是要替换HTML,实际上XML可以视作是对HTML的补充。XM和HTML的目标不同:HTML的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中干数据的内容。
口与HTML相似,XML不进行任何操作,虽然XML标记可用干描述订单项的结构但它 不包含可用于发送或处理该订单,以及确保按该订单交货的任何代码。程序中必须编写代码,来实际对XML格式数据的操作。
口与HTML不同,XML标记由架构或文档的作者定义,并且是无限制的。HTML标记则是预定义的,HTML作者只能使用当前HTML标准所支持的标记。
答:有多种方式可用于显示(或提供)XML数据,数据绑定的机制可与样式表一起使用,
以可视形式展示XML数据,并添加交互性。以下是显示XML的几种方法:
口XSLT-可扩展样式表语言。
口CSS一级联样式表。
口IE浏览器。