前一篇的小结,上一篇我写了创建良好的XML文档的一个小节:元素,这个小节包含了几个小的部分:文档根,合法和非法的名称,非字符,实体引用.那么我们接着来.
5.CDATA部分:
之前说过在在文档中,如果包含&等这样的字符,我们就要转义,用实体引用.但是,如果在较大的文档中,我们不想遍历每个无效的字符,也就是说,我们不想一个个的查看字符,然后将不合法的转义,那么我们就可以将他们包装到CDATA中,进行批量的转义,如,下面的就不合法:
<data>Idon'tknowhowtouse"<"and"&"inxml</data>
因为在上面的PCDATA中直接用了"<" 和"&",所以次XML不合法.但是我们可以用下面的:
<data><![CDATA[Idon'tknowhowtouse"<"and"&"inxml]]></data>
以上就合法了,一般使用CDATA转义那些可能包含非法字符的大段的XML文本.除此之外,还可以将这和规则添加到DTD和 XML Schema中,我们以后会说的.
注意:用"<![CDATA[ ]]>"还包含你的文本 .
看看下面的例子吧,测试下看看下面的是否合法:
<?xmlversion="1.0"?>
<capitals>
<countryname="Scotland">Edinburgh</country>
<countryname="Chile">Santiago</country>
<countryname="Italy">Rome</country>
<copyright>
Thecontentofthis<xml>fileis©NoCompanyAtAllLimited
</copyright>
<footer>Thisisjustsectionthatcontainsawholeloadof"characters"that
maybecouldcausesomeproblemswhenworkingwithXMLfiles.Weknowthat<and&characterscauseproblems,butwhatabout$and%??Well,bythetimeyoureadthisyouwillknow
</footer>
</capitals>
大家可以将文档保存为.xml的文本,然后用浏览器打开,结果会报错!(大家最好试试)看看怎么改欢迎大家提问!
6. XML中空白是有意义的.
在XML文档,最容易让人混淆的就是其中的空白字符.在使用HTML的时候,空白是没有什么意义的,如果有很多的空白(空格字符 )在一起,浏览器就将他们解析为一个空白,但是我们可以用 来使得很多的空格存在.
在XML中空格有意义,而且有很多的方式来处理空白将空白最为元素的数据处理和处理两个元素标记之间的空白是有差别的.见下:
如果空白在元素的文本(PCDATA),
<data><mydata>It is whitespace</mydata></data>
代码中的单词is 和whitespace之间有三个空白,在浏览器中显示如下:
It iswhitespace(空白合并了)
但是,如果标记之间出现空白,就会采用不同的方式处理的.如:
<data> <mydata>It is whitespace</mydata> </data>
在data和mydata元素之间有3个空格,但是用浏览器看的时候,data和mydata之间的空白还是用的.
所以,我们可以在元素的外部使用空白来缩进和对其代码,便于设计XML和阅读XML文档.
在XML解析器中,PDATA中的空白是有意义的,不过在其他的程序,如HTML中,不管空白在什么东方,多个的空白直接叠加在一起.我们我们要用一种方法来指定
PDATA的空白有意义.那么就用xml:space属性就可以了.该属性有default和preserve两个值.如果设置为 default那么解析器就在PDATA中合并空白,而preserve就
保留空白.
如下:
<dataxml:space="preserve">
HelloMyFriends
HelloEveryOne
HappyNewYear
</data>
输出的文本就是保留空格的格式:
Hello My Friends
Hello EveryOne
Happy NewYear
现在用浏览器看还有点问题,以后解决这个问题,大家只要知道这个规则就行.
7. 元素嵌套
使用元素的时候需要讨论的的就是:结构发生变化时,文档的意义也会变化的.对元素的位置同,解释也不同.所以元素的位置很重要.
<person>
<name>xiaoyang</name>
<address>
<name>wuhan</name>
</address>
</person>
上面两个name元素的虽然名字一样,但是意义是不同的,我们知道,XML是用来表示数据的,数据是有意义的,上面的两个name的意义就不一样.
在开发XML文档的时候,关键是可以自己创建标记,在定义标记的时候,标记一般与标记包含的内容有关,比如上面的name就是这样,一个表示人的名字,一个表示地址名,但是这样就很容易混淆,所以我们就要用命名空间(以后讲解的)来确保同名的元素能够正确解释.