2012-05-18 80 views
1

我有一個mysql 5.1存儲過程,它採用應該包含XML的TEXT輸入。mysql存儲過程 - 驗證輸入xml

我可以成功解析XML並完成所有需要的操作。現在我正在處理錯誤處理部分,我需要知道如何確保輸入XML格式正確且有效?

感謝

回答

0

我不知道在MySQL的XML支持什麼,說:「這是良好的XML」但你可以捏造事實。 MySQL有一個ExtractValue功能:

ExtractValue()接受兩個字符串參數,XML標記xml_frag的片段和XPath表達式xpath_expr(也稱爲定位器);它返回第一個文本節點的文本(CDATA),該文本節點是由XPath表達式匹配的元素的子節點。

但你也可以用它來檢查XML,因爲:

如果沒有找到匹配的文本節點的表達式(包括隱含/text()) - 用於無論什麼原因,只要xpath_expr有效,並且xml_frag由正確嵌套和關閉的元素組成 - 返回空字符串。
[...]
NULL是,如果xml_frag包含不正確嵌套或關閉,併產生一個報警元件所以,如果你的手ExtractValue任何有效的XPath表達式返回...

和任何有效的XML片段,您將得到非NULL結果,但如果使用值XPath和無效的XML,則會返回NULL。因此,所有你需要做的是建立一個INSERT和UPDATE觸發器在使用ExtractValue檢查XML和signal引發異常,如果你得到一個NULL:

select ExtractValue(new.your_xml_column, '/*') into @xml_check; 
if @xml_check is null then 
    signal sqlstate '45000'; 
end if; 
+0

啊哈我有5.1和信號似乎沒有提供。但是,如果我沒有找到其中一個必要元素,我接受了您的建議並創建了一個錯誤。 –

+0

@JyotsnaSonawane:我認爲SIGNAL與5.5一起出現,另一種方法是創建一些其他錯誤。 –