官术网_书友最值得收藏!

3.3 驗證XML文檔

在前一節(jié)中,我們了解了如何遍歷DOM文檔的樹形結(jié)構(gòu)。然而,如果僅僅按照這種方法來操作,會發(fā)現(xiàn)需要大量冗長的編程和錯誤檢查工作。你不但需要處理元素間的空白字符,還要檢查該文檔包含的節(jié)點是否和你期望的一樣。例如,當你在讀入下面這個元素時:

你將首先得到第一個子節(jié)點,這是一個含有空白字符“\n”的文本節(jié)點。你跳過文本節(jié)點找到第一個元素節(jié)點。然后,你要檢查它的標簽名是不是“name”,還要檢查它是否有一個Text類型的子節(jié)點。接下來,轉(zhuǎn)到下一個非空白字符的子節(jié)點,并進行同樣的檢查。那么,當文檔作者改變了子元素的順序或是加入另一個子元素時又會怎樣呢?要是對所有的錯誤檢查都進行編碼,就會顯得太瑣碎麻煩了,而跳過這些檢查又顯得不慎重。

幸好,XML解析器的一個很大的好處就是它能自動校驗?zāi)硞€文檔是否具有正確的結(jié)構(gòu)。這樣,解析就變得簡單多了。例如,如果知道font片段已經(jīng)通過了驗證,那么你不用進一步檢查就能得到其兩個孫節(jié)點,并把它們轉(zhuǎn)換成Text節(jié)點,得到它們的文本數(shù)據(jù)。

如果要指定文檔結(jié)構(gòu),可以提供一個文檔類型定義(DTD)或一個XML Schema定義。DTD或schema包含了用于解釋文檔應(yīng)如何構(gòu)成的規(guī)則,這些規(guī)則指定了每個元素的合法子元素和屬性。例如,某個DTD可能含有一項規(guī)則:

這項規(guī)則表示,一個font元素必須總是有兩個子元素,分別是name和size。將同樣的約束用XML Schema表示如下:

與DTD相比,XML Schema可以表達更加復(fù)雜的驗證條件(比如size元素必須包含一個整數(shù))。與DTD語法不同,XML Schema自身使用的就是XML,這為處理Schema文件帶來了方便。

在下一節(jié)中,我們將詳細討論DTD。接著簡要介紹XML Schema的一些基礎(chǔ)知識。最后,我們會展示一個完整的應(yīng)用程序來演示驗證是如何簡化XML編程的。

主站蜘蛛池模板: 西乌珠穆沁旗| 屯昌县| 满城县| 开平市| 西城区| 平江县| 井陉县| 日照市| 洱源县| 门源| 叶城县| 阿合奇县| 临夏县| 墨脱县| 小金县| 苍溪县| 平湖市| 西藏| 大港区| 隆林| 邵阳市| 香港 | 南投县| 中超| 军事| 文山县| 桂东县| 恭城| 海门市| 黄大仙区| 鹤庆县| 赤峰市| 和平县| 抚顺市| 石柱| 淮安市| 万载县| 察雅县| 香河县| 霍邱县| 自贡市|