我有一个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一起出现,另一种方法是创建一些其他错误。 –