XML初學者必讀

2021-06-20 23:46:30 字數 1989 閱讀 6020

差不多每天都有人問「什麼是 xml」,「xml 能做什麼」,「xml 能不能替我做這個」,「xml 會取代什麼」 等等諸如此類的問題。由於最近一段時間稍微對 xml 使用了一下,我來談談自己的感覺。這些經驗都很淺顯,任何乙個用過 xml 的人都有,並且見仁見智,只不過我算剛剛走過這段路,對自己一開始的困惑,誤解還記得清,所以拿出來和大家分享一下。   

我覺得初學者可能會走近的誤區:   

1. xml 是不是 html 的取代者   

不是。寫得好的 html 應該是乙個 well-formed 的 xml 文件,其他方面最好不要把他們放在乙個水平線上比較   

2. xml 是不是資料庫的取代者   

不是。   

3. xml 是不是...的取代者   

都不是。   

這個結論可能聽上去很滑稽:xml 是非常非常重要的東西,但它什麼都取代不了。但這並不奇怪,有人把它比做 ascii 標準,他們是一切一切的基礎,但並沒有(也不需要)取代什麼。(但是就如同 ascii 取代了一些沒有成大器的字符集定義,xml 也會取代你在應用中自己定義的一些資料傳輸規範,但沒有什麼特別主流的東西。)   

剛開始學 xml (或者說沒開始學之前)的時候最愛問的乙個問題肯定是:使用 xml 能給我帶來什麼好處?   

我覺得從某種角度上說,使用 xml 有些象使用 oo 物件導向:   

- 你可以用它,你也可以不用它。   

- 如果你的應用非常簡單,用它不一定方便,沒準兒用了效果還會更差。   

- 和其他實際東西比如資料庫,mts,web server比起來,它更像是乙個概念,一種方法   

- 專案越大,它的發揮餘地越大,作用越大。   

- 一旦真正理解後,哪怕不用 xml parser,也不妨礙你使用這個概念,如同可以拋開特定語言使用 oo。   

- ......   

好像更抽象,更沒譜兒了吧。   

那就隨便舉個例子。比如你本來想在 bbs 應用中的兩個模組之間傳一些資料:   

- 發言人   

- 密碼   

- 標題   

- 內容   

使用四個引數是不太現實的,因為你隨時可能要擴充套件功能,比如再加上個   

- 表情符號等等   

不可能每次加個功能,就重新定義一遍函式。   

所以最簡單的方法是把他們合併起來作為乙個引數傳遞給函式。   

在有 xml 之前,你可能會使用分隔符:   

str = "發言人=張三;密碼=**;標題=abc;內容=xyz"   

到 server 那邊使用 dictionary 或 collection 或 split 等等方法把他們拆開。   

(當然可以自己定義物件啦,結構啦等等,但多數情況下還得是純字串--比如另乙個模組不是自己開發的。)   

這種傳遞字串的方法有幾個問題,總結成兩個最大的方面就是:   

1. 正確的解析它很麻煩。(比如標題正好是「發言人=張三;」怎麼辦)   

2. 是平面的,沒有層次型結構   

你可以寫些函式來解決這些問題,比如確保裡面肯定有「發言人」,「密碼」等等;再寫些函式做一下字元轉義,再寫些函式製造出層次性的效果...   

夠了!咱還是用 xml 吧。在我目前淺顯的認識裡:   

- xml 是用來傳遞資料的   

- xml 讓這些資料有了結構 -- 乙個樹型結構   

- xml 有全套的操作這種結構的方法   

- xml 規範(或者說的實際點,xml parser)幫你確定你建立的字串是合法的   

- xml 規範(或者說的實際點,xml parser)中有辦法驗證這個合法性   

- 對於拿到這個字串的 server component 來說,可以用 xml 中現成的方法來操作它, 這就是 xpath, pattern,類似於 t-sql 語句。(但記住 xml 是樹型結構的)   

- xslt 使用 xpath 對 xml 進行轉換(類似於 dts),其中一種特例是把 xml 轉換成 html 輸出。  

XML初學者必讀

差不多每天都有人問 什麼是 xml xml 能做什麼 xml 能不能替我做這個 xml 會取代什麼 等等諸如此類的問題。由於最近一段時間稍微對 xml 使用了一下,我來談談自己的感覺。這些經驗都很淺顯,任何乙個用過 xml 的人都有,並且見仁見智,只不過我算剛剛走過這段路,對自己一開始的困惑,誤解還...

vector模板,初學者必讀

vector 稱為向量,是一種類模板,其宣告包含在標頭檔案 vector 中,所以使用veto 時需要包含標頭檔案 vector vector是一種支援高效地隨機訪問和高效地向尾部插入新元素的容器,它一般實現為一 個動態分配的陣列,所以在程式開發過程中,使用vector作為動態陣列是非常方便的 類 ...

給 XML 初學者

簡 介 差不多每天都有人問 什麼是 xml xml 能做什麼 xml 能不能替我做這個 xml 會取代什麼 等等諸如此類的問題。由於最近一段時間稍微對 xml 使用了一下,我來談談自己的感覺。這些經驗都很淺顯,任何乙個用過 xml 的人都有,並且見仁見智,只不過我算剛剛走過這段路,對自己一開始的困惑...