2012-05-18 53 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一起出现,另一种方法是创建一些其他错误。 –