前一篇的小結,上一篇我寫了創建良好的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就是這樣,一個表示人的名字,一個表示地址名,但是這樣就很容易混淆,所以我們就要用命名空間(以後講解的)來確保同名的元素能夠正確解釋.
好了,以上就是創建良好的XML的時候對元素的約束和規則.希望大家理解.
下一篇,講述對屬性的約束和規則.!歡迎大家反饋!