我有一個mysql 5.1存儲過程,它採用應該包含XML的TEXT輸入。mysql存儲過程 - 驗證輸入xml
我可以成功解析XML並完成所有需要的操作。現在我正在處理錯誤處理部分,我需要知道如何確保輸入XML格式正確且有效?
感謝
我有一個mysql 5.1存儲過程,它採用應該包含XML的TEXT輸入。mysql存儲過程 - 驗證輸入xml
我可以成功解析XML並完成所有需要的操作。現在我正在處理錯誤處理部分,我需要知道如何確保輸入XML格式正確且有效?
感謝
我不知道在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;
啊哈我有5.1和信號似乎沒有提供。但是,如果我沒有找到其中一個必要元素,我接受了您的建議並創建了一個錯誤。 –
@JyotsnaSonawane:我認爲SIGNAL與5.5一起出現,另一種方法是創建一些其他錯誤。 –