2009-08-28 60 views
2

當我收到XML數據(通過Twitter API調用,在這種情況下)時,我想在開始使用它之前以某種方式驗證它是最佳做法嗎?我的應用程序最近出現了很多無法解決的問題,我想排除不良的XML數據。從Twitter驗證XML

XML是否會以某種方式「壞」?像Twitter這樣的超載服務器會吐出一半應該以我的方式出現嗎?

我真正的問題是雙重的:在使用XML數據之前,我應該驗證XML數據嗎?我該怎麼做? (我已經知道XML數據的假定結構)

謝謝!我選擇一個答案(並感謝您的努力)之前的最後一個澄清:如果我只需要靜態長度XML文件中的5個可預測字段,是否會留下創建XSD所克服的漏洞?

if(!isset($xml->id, $xml->text, $xml->created_at, $xml->sender, $xml->recipient)) throw... 
+0

亞歷克斯我更新了我關於滾動你自己的模式的答案。 – Kev 2009-08-28 18:27:49

回答

2

驗證XML的最明顯的方法是:

  1. 嘗試將XML加載到你最喜歡的 DOM容器或使用一些其他機制解析它(我不是XML處理完全familair在PHP中)。這將允許您檢查XML是否「格式良好」。如果XML格式不正確 (即您只收到一半的XML 響應),那麼您現在就會發現這個問題 ,並處理 它。

  2. 一旦你成功 加載/分析的XML接下來的事情 是驗證它針對XML 模式。不幸的是,Twitter不要 爲他們的XML發佈XML模式,所以你需要自己滾動這些。

您可以手動創建自己的XML模式。這裏有一個鏈接,這將幫助你開始:

XML Schema Tutorial (W3 Schools)

您還可以得到的工具,如Altova XMLSpy可以「推斷」從你的XML架構。即對如何定義模式進行最佳猜測,您可能必須在生成後對其進行調整。還有其他免費工具,但我只用過XMLSpy。正如Alan所述,如果Twitter有時會更改其XML格式,則需要更新模式以考慮這些更改。

創建XML模式起初可能令人生畏,但一旦你掌握了它,你會發現它很容易。我發現這本書是優秀的,當我第一次開始了:

XML Schema - The W3C's Object-Oriented Descriptions for XML (O'Reilly Press)

+0

您可以詳細說明自己的模式嗎?我不知道如何開始這樣的事情... – 2009-08-28 17:08:43

0

要回答你的問題:

輸入驗證是錯誤處理的主要組成部分之一。你應該總是假設你可以得到不好的數據,然後儘可能地防範它。

要驗證XML,請根據模式(通常保存在XSD文件中)對其進行驗證。

您可以從XML文件中推斷出模式。 MSFT有一個免費的工具可以做到這一點,XSD.exe(它帶有Visual Studio)或者使用其他第三方工具。然而,這樣做的缺點是,如果Twitter更新其格式,則需要更新模式。如果沒有模式,你可以確保XML格式良好(通常通過嘗試解析它),並假設你期望的數據缺失並防禦性地對其進行編碼。

+0

有沒有機會找到用於Twitter XML數據的XSD? – 2009-08-28 15:55:49

+0

他們在這裏有例子:http://apiwiki.twitter.com/Return-Values,顯示它應該是什麼樣子。我能否以某種方式生成XSD文件? – 2009-08-28 16:04:13

0

這是不幸的是,Twitter正在發佈的XML API,但沒有發佈模式。

編寫自己的模式的好處是您可以編寫程序來處理根據您的模式有效的消息。然後,如果Twitter更改他們的API,或者如果有一個未公開的功能發出您不期望的消息格式,或者如果您錯誤地理解了他們的文檔,而不是在程序中深入瞭解它爲什麼會出現故障,會馬上得到驗證錯誤。你不一定會知道爲什麼這個消息是你沒有預料到的,但至少你會知道這就是問題所在。