- Java核心技術(shù)·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 684字
- 2020-10-30 18:10:48
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編程的。
- Google Flutter Mobile Development Quick Start Guide
- 復(fù)雜軟件設(shè)計之道:領(lǐng)域驅(qū)動設(shè)計全面解析與實戰(zhàn)
- Beginning C++ Game Programming
- Bootstrap Essentials
- Python數(shù)據(jù)挖掘與機器學(xué)習(xí)實戰(zhàn)
- Teaching with Google Classroom
- Mastering Data Mining with Python:Find patterns hidden in your data
- PHP+MySQL+Dreamweaver動態(tài)網(wǎng)站開發(fā)從入門到精通(第3版)
- Spring Boot+MVC實戰(zhàn)指南
- GameMaker Essentials
- Python入門很輕松(微課超值版)
- JavaScript從入門到精通(視頻實戰(zhàn)版)
- 算法設(shè)計與分析:基于C++編程語言的描述
- Simulation for Data Science with R
- Java RESTful Web Service實戰(zhàn)