XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式? 收藏
a: 兩種定義形式 dtd(文檔類型定義) schema(XML模式);
b: XML Schema和DTD都用于文檔驗證,但二者還有一定區(qū)別,本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的)。另外:
XML Schema是內(nèi)容開放模型,可擴展,功能性強;而DTD可擴展性差;
XML Schema支持豐富的數(shù)據(jù)類型,而DTD不支持元素的數(shù)據(jù)類型,對屬性的類型定義也很有限;
XML Schema支持命名空間機制,而DTD不支持;
XML Schema可針對不同情況對整個XML文檔或文檔局部進行驗證;而DTD缺乏這種靈活性;
XML Schema完全遵循XML規(guī)范,符合XML語法,可以和DOM結(jié)合使用,功能強大;而DTD語法本身有自身的語法和要求,難以學(xué)習(xí);
c:有DOM(文檔對象模型),SAX(Simple API for XML),STAX等
DOM:文檔驅(qū)動,處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個文檔裝入內(nèi)存,適合對XML的隨機訪問
SAX:不同于DOM,SAX是事件驅(qū)動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結(jié)束,或者標簽開頭與標簽結(jié)束時,它會觸發(fā)一個事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問,且是只讀的。當前瀏覽器不支持SAX
SAXParserFactory factory= SAXParserFactory.newInstance();
SAXParser saxparser= factory.newSAXParser();//創(chuàng)建SAX解析器
MyHandler handler=new MyHandler();//創(chuàng)建事件處理器
saxParser.parse(new File(“Sax_1.xml”),handler);//綁定文件和事件處理者
STAX:Streaming API for XML (StAX) Streaming API for XML (StAX)
是用 Java™ 語言處理 XML 的最新標準。StAX 與其他方法的區(qū)別就在于應(yīng)用程序能夠把 XML 作為一個事件流來處理。StAX 允許應(yīng)用程序代碼把這些事件逐個拉出來,而不用提供在解析器方便時從解析器中接收事件的處理程序。