給XML初學(xué)者
我覺得XML初學(xué)者可能會走近的誤區(qū):
1.XML是不是HTML的取代者
不是。寫得好的html應(yīng)該是一個well-formed的xml文檔,其他方面最好不要把他們放在一個水平線上比較
2.XML是不是數(shù)據(jù)庫的取代者
不是。
3.XML是不是...的取代者
都不是。
這個結(jié)論可能聽上去很滑稽:XML是非常非常重要的東西,但它什么都取代不了。但這并不奇怪,有人把它比做ASCII標(biāo)準(zhǔn),他們是一切一切的基礎(chǔ),但并沒有(也不需要)取代什么。(但是就如同ASCII取代了一些沒有成大器的字符集定義,XML也會取代你在應(yīng)用中自己定義的一些數(shù)據(jù)傳輸規(guī)范,但沒有什么特別主流的東西。)
剛開始學(xué)XML(或者說沒開始學(xué)之前)的時候最愛問的一個問題肯定是:使用XML能給我?guī)硎裁春锰?
我覺得從某種角度上說,使用XML有些象使用OO面向?qū)ο螅?/p>
你可以用它,你也可以不用它。如果你的應(yīng)用非常簡單,用它不一定方便,沒準(zhǔn)兒用了效果還會更差。和其他實(shí)際東西比如數(shù)據(jù)庫,MTS,WebServer比起來,它更像是一個概念,一種方法。項(xiàng)目越大,它的發(fā)揮余地越大,作用越大。一旦真正理解后,哪怕不用xmlparser,也不妨礙你使用這個概念,如同可以拋開特定語言使用OO。
好像更抽象,更沒譜兒了吧。
那就隨便舉個例子。比如你本來想在bbs應(yīng)用中的兩個模塊之間傳一些數(shù)據(jù):發(fā)言人、密碼、標(biāo)題、內(nèi)容。使用四個參數(shù)是不太現(xiàn)實(shí)的,因?yàn)槟汶S時可能要擴(kuò)展功能,比如再加上個表情符號等等。不可能每次加個功能,就重新定義一遍函數(shù)。所以最簡單的方法是把他們合并起來作為一個參數(shù)傳遞給函數(shù)。在有xml之前,你可能會使用分隔符:str="發(fā)言人=張三;密碼=**;標(biāo)題=abc;內(nèi)容=xyz"。到server那邊使用dictionary或collection或split等等方法把他們拆開。(當(dāng)然可以自己定義對象啦,結(jié)構(gòu)啦等等,但多數(shù)情況下還得是純字符串--比如另一個模塊不是自己開發(fā)的。)
這種傳遞字符串的方法有幾個問題,總結(jié)成兩個最大的方面就是:
1.正確的解析它很麻煩。(比如標(biāo)題正好是“發(fā)言人=張三;”怎么辦)
2.是平面的,沒有層次型結(jié)構(gòu)
你可以寫些函數(shù)來解決這些問題,比如確保里面肯定有“發(fā)言人”,“密碼”等等;再寫些函數(shù)做一下字符轉(zhuǎn)義,再寫些函數(shù)制造出層次性的效果。夠了!咱還是用XML吧。
在我目前淺顯的認(rèn)識里:XML是用來傳遞數(shù)據(jù)的;XML讓這些數(shù)據(jù)有了結(jié)構(gòu)--一個樹型結(jié)構(gòu);xml有全套的操作這種結(jié)構(gòu)的方法;xml規(guī)范(或者說的實(shí)際點(diǎn),xmlparser)幫你確定你創(chuàng)建的字符串是合法的;xml規(guī)范(或者說的實(shí)際點(diǎn),xmlparser)中有辦法驗(yàn)證這個合法性;對于拿到這個字符串的servercomponent來說,可以用xml中現(xiàn)成的方法來操作它。
這就是xpath,pattern,類似于T-SQL語句(但記住xml是樹型結(jié)構(gòu)的)。XSLT使用xpath對xml進(jìn)行轉(zhuǎn)換(類似于DTS),其中一種特例是把XML轉(zhuǎn)換成HTML輸出。
【編輯推薦】