2011-06-04 71 views
5

如果我要使用XML文件來存儲一些信息,我是否需要一個讀取/寫入數據的XML解析器?我可以使用字符串操作函數嗎?爲什麼不呢?使用XML文件存儲數據

回答

5

你可以想象使用字符串操作函數,因爲這是XML庫最終使用的。 XML文檔只是特殊格式的長字符串。但是,除非您對XML有所瞭解(以及什麼是和不是有效的XML),否則現在使用XML解析器/序列化器將爲您節省很多麻煩。 XML(名稱空間,轉義序列等)有細微差別,這些問題會導致本地代碼中的問題不知如何正確處理它們。當你處理完所有特殊情況之後,無論如何你都會有效地寫出一個半分析的XML解析器。

4

不要......我重複......不要手動解析或構建XML。

在我的工作中,我們在不同的供應商之間實現了很多接口。我無法告訴你我們有多少次在基於xml的界面上工作,並且遇到了某種轉義編碼/解碼問題。我連接到基於xml的服務時將運行的第一個測試之一是在輸入中添加非法的xml字符。

你叫什麼名字?:鮑勃<> &「

錯誤解析XML文檔

我們遇到了很多次了,如果我們的任何工程師檢查有相近之處:!

 
xml = "<rootnode>" 
xml += "<leafnode>" + someValue + "</leafnode>" 
xml += "</rootnode>" 

我們會認真考慮他們的對接可變薪酬只要「someValue中」包含非法字符,你pooched那麼你的代碼開始看起來像這樣:。

 
xml = "<rootnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "</rootnode>" 

然後東西還在吹起來,這樣的天才工程師嘗試:

 
xml = "<rootnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "</rootnode>" 

xml = XmlEscape(xml) 

注:這個過程實際上發生在我身上兩次在接口上工作時。

您知道它之前,通過線路的流結束看起來像

 
&amp;lt;rootnode>HELP<rootnode> 
&amp;lt;rootnode&gt;ME&amp;lt;rootnode&amp;gt; 

摘要:

請使用圖書館。 k thx再見。

+0

是什麼庫用於XML?有沒有建立或標準的圖書館? – 2012-02-14 08:14:16

+0

在Java中,它們是庫,在Ruby中是寶石。假設Java,繼續到Apache網站並查看他們的工具。 – Thufir 2012-03-26 12:14:34