《第2章XML文件的规则.ppt》由会员分享,可在线阅读,更多相关《第2章XML文件的规则.ppt(37页珍藏版)》请在三一办公上搜索。
1、第2章 XML文件的规则,2.2 XML中标记设置,2.3 特殊字符处理,2.4 CDATA段,2.5 标记的文本数据,2.1 XML声明,第2章 XML文件的规则,2.9 区分大小写,2.10 标记的子标记的关系,2.6 属性设置,2.7 注释设置,2.8 名称空间,一个规范的XML文件,声明应当在文件的第一行,在其前面不能有空白或其他的任何字符,声明以“”结束。XML的声明用来说明这是一个XML文档,声明中包含了XML文件的相关信息。下面是一个XML声明:,2.1 XML声明,2.1.1 XML声明中的版本属性,2.1.2 XML声明中的编码属性,2.1.3 XML声明中的独立属性,注意:
2、“”之间不要有空格。,返回,XML声明中的版本的属性:version 该属性指出该XML文件遵循那个版本的XML规范,一个XML声明可以只包含版本属性。如果声明中还包含有其它属性,版本属性必须排在其它属性之前。目前,版本属性的值只可以取1.0,XML的1.1版本还没有被正式公布。如果将XML的声明中的版本属性值设置成“1.1”:,XML声明中的版本属性,返回,出现的错误如下图所示:,XML声明中的版本的属性:encoding,XML声明中的编码属性(1),在XML规范中列出了很多编码的类型,常用可选的字符集有:,GB2312或GBK:简体中文编码。BIG5:繁体中文编码。UTF-8:压缩Uni
3、code编码。,该属性规定了该XML文件采用编码的字集。如果没有明确地指出“encoding”的属性值,则默认值是“UTF-8”。在保存XML文件时必须选择相同的字符编码。,XML声明中的编码属性(2),小李 1234567,标记的中文可以正常显示,如图所示:,如果XML文档使用中文标记或出现中文内容,就应该在XML声明中使用“GB2312”编码,例如:,如果不使用gb2312编码,而是使用默认的编码,解析器将会提示错误,例如将XML文件写成如下形式:,XML声明中的编码属性(3),小李 1234567,解析器报告的错误如图所示:,返回,XML声明中的版本的属性:standalone,XML声
4、明中的独立属性,该属性用来说明XML文件是否是完全独立的,即是否与其他文件相关联,该属性可以取值为“yes”或“no”。一个XML文件能够完全独立被理解而无需读取其他文件,就是一个独立的XML文件。反之,如果不引用其他外部实体或数据源就不能进行句法分析,则这样的文件就不是一个独立的文件。独立的XML文件的声明中standalone属性的值设置为“yes”:,如果没有显示地指明该属性,则默认值是“no”。,返回,2.2 XML中标记设置,XML文件中的标记分为空标记和非空标记两种。,2.2.4 标记的名称,2.2.2 非空标记的设置,2.2.5 根标记,2.2.1 空标记的设置,2.2.3 非空
5、标记的内容设置,返回,空标记的设置,所谓的空标记就是没有任何标记内容的标记。因为空标记不标记任何内容,所以不需要开始标记和结束标记。空标记以“”结束。可以含有属性也可以不含有属性。格式为:,注意:“”之前可以有空格或回车。,例如:,返回,非空标记的设置(1),含有标记内容的标记称为非空标记。非空标记必须由“开始标记”与“结束标记”组成。开始标记以“”结束,“”之间是标记的名称和属性列表。开始标记的格式为:,结束标记以“”标识结束。“”之间是标记的名称,结束标记不含有属性。结束标记的格式为:,非空标记的设置(2),“开始标记”和“结束标记”之间的是该标记所标记的内容。例如:,小王,注意:开始标记
6、中“”前面可 以有空格或回车。结束标记中“”前面可以有空格或回车。结束标记的名称要与开 始标记的名称一致。,返回,非空标记的内容设置(1),非空标记的标记内容可以由文本数据和标记构成。其中的标记称为该标记的子标记。文本数据可以由任何的可见或不可见字符组成。例如:,小王 男,“”标记所标记的文本数据是“小王”。它还包含一个子标记“”,该子标记所标记的文本数据是“男”,非空标记的内容设置(2),第二个例子:,apple apple apple,在上述代码中,3个“”标记所标记的内容不是完全相同的。第一个“”标记所标记的内容是跟在开始标记后面的换行符、“apple”和后面的换行符。第二个“”标记所标
7、记的内容就是“apple”。第三个“”标记所标记的内容是“apple”及后面的空格符。,返回,标记的名称,无论是空标记还是非空标记都要有一个名称,用户在定义标记的时候,标记的命名必须满足如下规则:,(1)名称可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,不能含有空格。(2)名称必须以字母或下划线开头。(3)如果XML文件采用UTF-8等编码,标记的名称还可以包含汉字及其它多种语言中的文字。,以下都是合法的标记名称:,返回,根标记,一个XML文件中必须有且只有一个根标记,其他标记必须封装在根标记中。XML文件中的标记必须形成树状分层结构。例如:,orange 1.0 b
8、anana 2.0,文档结构图:,返回,2.3 特殊字符处理(1),XML中有5种特殊字符:左尖括号(小于号)“”、与符号“&”、单引号“”和双引号“”,这些字符在XML中称为标记字符,是标记的组成部分。例如:,The score:85:A,解析器会把“”和“”误认为XML的标记而不会当做大于号和小于号。如图所示:,2.3 特殊字符处理(2),如果在标记内容当中需要用到这些字符,就需要通过实体引用的方法。对于上面的5个特殊字符,XML有对应的5个预定义实体,见下表:,2.3 特殊字符处理(3),前面的程序可以修改为:,The score:60:C others:B.,这样,解析器就能解析出预期
9、的结果,如图所示:,返回,2.4 CDATA段(1),如果XML文件的一段标记内容中需要用到许多这样的特殊字符,文本数据中就会出现很多实体引用,在标记内容中大量使用实体引用会带来很多不便,如:文本数据阅读困难。为此,W3C引入了另一种方法CDATA(Character Data)段。CDATA段类似于HTML中的标记。包含在CDATA段中的内容会被XML解析器按原样解析出来。也就是说,解析器不对段内容做分析处理。所以,CDATA段中可以包含任意的字符。,CDATA段用“”作为段结束。段开始和段结束之间称为CDATA段内容。例如:,85:A,2.4 CDATA段(2),上例中CDATA中的内容内
10、容“The score:85:A 60:C others:B.”不会被解析器分析处理。,注意:“”的各个字符之间不能有空格符。CDATA段中不可以嵌套另一个CDATA段。,返回,2.5 标记的文本数据(1),标记的内容可以包括文本数据和标记。标记的文本数据中可以有普通的字符、CDATA段、字符引用和实体引用。,普通字符可以是任意的字符(特殊字符使用见2.3节)。对于无法从键盘输入到文件中的字符,如希腊字母,可以使用字符引用。字符引用的格式是“+字符代码”或“+字符代码”。其中以“”为开始的引用,使用的是字符的十进制代码。以“”为开始的引用,使用的是字符的十六进制代码。字符的
11、代码可以在字符映射表(依次单击“开始”“程序”“附件”“系统工具”“字符映射表”)中找到。,2.5 标记的文本数据(2),一个实例:,标记的文本数据。对应字符:,利用DOM解析器解析,得到的结果如图所示:,查看DOM解析器代码,返回,2.6 属性设置,2.6.1 属性的构成 2.6.2 属性的原则,XML的属性是指标记的属性,依附于标记而存在的,属性可以为标记添加附加信息。,返回,属性的构成,属性名称和标记名称的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。属性值是一个用单引号或双引号括起来的字符串,如果属性值中需要包含特殊字符
12、(“”、“&”、“”和“”),则必须使用字符引用或实体引用。属性的名称和属性值由等号连接。例如:,标记内容,属性是由属性名和属性值构成的,是一个名值对,属性必须在非空标记的开始标记和空标记中声明。其格式为:,属性名称和标记名称的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。属性值是一个用单引号或双引号括起来的字符串,如果属性值中需要包含特殊字符(“”、“&”、“”和“”),则必须使用字符引用或实体引用。属性的名称和属性值由等号连接。例如:,返回,属性的原则,属性不体现数据的结构,只是数据的附加信息。设置属性的一个最基本原则:不要
13、因为频繁使用属性而破坏XML的数据结构。例如:,这个结构就不是很好。如果都设置成子标记,结构就会变得清晰。如:,男 25 175 65 1234567 12345678987654321,返回,2.7 注释设置(1),注释是对文档内容和结构的解释,XML文件的注释和HTML文件的注释相同,以“”结束。XML文件的注释不属于文件的内容,所以,XML解析器会忽略注释部分的内容,不做分析处理。例如:,注释不是XML的标记,它们可以放在根标记之前或之后,但是注释不能位于XML声明之前。,2.7 注释设置(2),在XML中使用注释应当注意一下几点:,注释不能出现在XML声明之前。注释不能出现在标记中。注
14、释中不能出现连续两个连字符,即“-”,如:。注释中可包含标记,但标记中不能包含“-”,被包含的标记 解析时将被忽略。注释不能嵌套。,返回,2.8 名称空间,名称空间用来区分相同名称标记,XML的名称空间分为有前缀名称空间和无前缀名称空间。,2.8.1 有前缀和无前缀的名称空间,2.8.2 标记中声明名称空间,2.8.3 名称空间的作用域,2.8.4 名称空间的名字,返回,有前缀和无前缀的名称空间(1),声明有前缀的名称空间:,xmlns:前缀=名称空间的名字,xmlns=名称空间的名字,声明无前缀的名称空间:,例如:,xmlns:zs=jilinxmlns=12345,有前缀和无前缀的名称空间
15、(2),如果两个名称空间的名字相同,则称这两个名称空间相同。也就是说,对于有前缀的名称空间,如果前缀相同,名称空间的名字不同,它们也是不同的名称空间;前缀不同,名称空间的名字相同,它们也是相同的名称空间。前缀的作用只是方便引用名称空间而已。,注意:名称空间的前缀不能用“xml”。“xmlns”与“:”以及“:”与前缀之 间不能有空格。,返回,标记中声明名称空间,名称空间是通过在标记中声明名称空间来建立的,在标记中声明名称空间必须在标记的“开始标记”里声明,而且名称空间的声明必须放在开始标记中标记名称的后面,例如:,出生日期:1980.10.10 出生日期:1981.11.12,一个标记中可以声
16、明多个名称空间,声明名称空间并不代表一定要使用名称空间。,返回,名称空间的作用域,名称空间的作用域就是该名称空间的作用范围,一个名称空间的作用范围是声明名称空间的标记及其子孙标记,除非子孙标记又声明了名称空间。下面通过一个例子加以说明:,apple orange banaba,其中红色为名称空间“ns1”的作用范围,蓝色为名称空间“ns2”的作用范围。,返回,名称空间的名字,名称空间的名字可以是任意的,目的是区分相同名字的标记。W3C推荐使用统一资源标识符(Uniform Resource Identifier,URI)作为名称空间名字。一个URI是一个具有一定语法、用来标识资源的字符串。它可
17、以是一个主机域名、一个文件绝对路径或一个E-mail地址等。在一个XML文件中,一个URI不必是有效的,因为它的作用只是用来区分标记的名字。例如:,“http:/www.w3c.org”“http:/www.abc.abc”,它们都是合法的名字,但不一定都是有效的地址。,返回,2.9 区分大小写,在XML的规范中规定,XML文件中的标记、属性、名称空间等的名字是严格区分大小写的。例如,“book”与“Book”是两个不同的名字,“!cdata”也不是CDATA段的开始标记。一个例子:,XML文件中名字区分大小写。,用IE6.0打开该XML文件会出现如图所示的结果:,返回,2.10 标记的子标记
18、的关系,一个规范的XML文件必须有且只有一个跟标记,其他标记都必须封装在根标记中,称为根标记的子标记,一个标记的子标记的子标记称为该标记的孙标记。一个标记的子标记也称为该标记的1级子标记,孙标记称为该标记的2级子标记,以此类推。一个XML文件的标记应当形成树状的结构。如图所示:,返回,DomParse.javaimport org.w3c.dom.*;import javax.xml.parsers.*;import java.io.*;public class DomParse public DomParse()try/获得DocumentBuilderFactory对象 DocumentB
19、uilderFactory domfac=DocumentBuilderFactory.newInstance();/创建DOM解析器 DocumentBuilder dombuilder=domfac.newDocumentBuilder();/解析指定的XML文件 Document document=dombuilder.parse(new File(01.xml);/根据标记名称获得node标记列表 NodeList nodelist=document.getElementsByTagName(node);/遍历每一个node节点 for(int i=0;inodelist.getLength();i+)Node node=nodelist.item(i);/获得标记内容 String content=node.getTextContent();System.out.println(content);catch(Exception e)e.printStackTrace();public static void main(String args)new DomParse();,DOM解析器,