2009-06-25 44 views
0

我有一個正在使用外部設備數據的Lua程序。該設備將返回格式不正確的XML看起來像:在Lua中修復壞的XML

<element attribute1="value1" attribute2="value2" attribute3=" m "value3" " attribute4="value4" /> 

特別是某些字段是用戶可編輯和可可以想象包含應該逃出的項目,但都沒有。希望我能得到修復這些消息的代碼,但在此之前,我需要一種解決方法來嘗試「做正確的事情」。這些消息也似乎總是在一個固定的格式屬性以相同的順序和始終存在(據我可以告訴),所以我可以用一個非常嚴格的模式匹配,如:

string.match(str, 'attribute1="(.*)" attribute2="(.*)" attribute3="(.*)" attribute4="(.*)") 

但這似乎真的如果他們決定更改格式(如果不修復問題),那麼它會自然中斷。(

對於替代解決方案有什麼建議嗎?我主要關心的是找到需要變成&的「s」。其他的XML實體我並不擔心。

回答

3

不幸的是,如果XML的格式不正確,那麼y你無法想出一些絕對適用於任何情況的東西。

我會做的是,首先嚐試將其解析爲正常的XML。如果失敗,則回退到您的正則表達式方法。這樣,當這個XML的生產者被修復時,你的代碼將自動開始做正確的事情。

+0

我認爲對於我的情況,我會更好的只是先做正則表達式,然後如果失敗就會回落(並且吐出一個警告)。我只是轉發XML,而不是消耗它,所以我只是想爲後來實際使用它的代碼做好事。 – Dolphin 2009-06-29 00:58:12