2013-04-09 130 views
0

我正在嘗試構建一個驗證特定XML並輸出可讀結果的工具。我現有的PHP代碼使用DOMDocument :: schemaValidate來針對.xsd文件驗證XML,但錯誤消息不是很友好。在PHP中驗證XML並生成「可讀的」錯誤消息?

例如,讓我們假設我的XML看起來像下面的示例和緯度應該是一個小數:

<Person> 
    <FirstName>Bret</FirstName> 
    <Location> 
    <Address>123 Test Ave.</Address> 
    <Latitude></Latitude> 
    <Longitude>30.139338</Longitude> 
    </Location> 
</Person> 

該錯誤消息我目前會得到將是:

文件:: schemaValidate():元素'Latitude':''不是原子類型'xs:decimal'的有效 值。

我希望它說:

錯誤在XML 5號線:此人「佈雷」在他們的地址空緯度。您必須包含有效的谷歌縱橫以便我們處理此XML。

類似的問題已經被問過:

不過,我願意寫我自己用蠻力驗證代碼PHP或Perl如果DOMDocument :: schemaValidate不適合這項工作。請注意,我的錯誤消息需要引用存儲在父元素中的信息,例如我的示例中的「FirstName」字段。

我的問題是:什麼是創建此驗證工具的好方法?是否有任何現有的代碼庫或教程指向正確的方向?

謝謝!

回答

1

正如您可以想象的那樣,這是針對每個XML文件和格式的。

我會開始處理的第一個問題是確定與驗證錯誤相關的確切元素。例如。與您的錯誤是

/Person/Location/Latitude 

這將是一個先決條件告訴在錯誤消息中某個人(元素)有問題。

第二個問題是記錄結構的主要構件。

E.g.已知緯度的一部分位置這是的一部分人。您需要在某處管理這些知識以提供更好的錯誤消息。

此外,我會做兩個,例如輸出更友好的錯誤消息以及更技術性的錯誤消息。同時要注意,你不能總是解決你的問題。例如。如果在輸入中被給出了錯誤的標記名,如您永遠無法將其解決爲人爲友善的錯誤消息,因爲這超出了您可以添加的知識範圍。

+0

感謝您的回覆。在選擇我接受的答案之前,我會看到其他建議。使用腳本識別標籤名稱大小寫問題可能是可能的,但我確實知道您來自哪裏。例如,缺少的結束標記可能很難追蹤到。 – clone45 2013-04-10 16:30:33

+0

是的,當然。但是,你可以贊成;)也可以激勵他人回答。 – 2013-04-10 16:32:39