我有一个MySQL5.1存储过程,它接受应该包含XML的文本输入。
我可以成功地解析XML并完成所需的所有工作。现在我正在处理错误处理部分,我需要知道如何确保输入的XML格式良好且有效?
谢谢
发布于 2012-05-18 12:20:52
我不知道MySQL的XML支持中有什么写着“这是格式良好的XML”,但是你可以伪造它。MySQL有一个ExtractValue函数:
XML接受两个字符串参数,一个是xml_frag标记片段,另一个是XPath表达式xml_frag(也称为定位器);它返回第一个文本节点的文本(CDATA),该节点是与XPath表达式匹配的元素的子元素。
但是您也可以使用它来检查XML,因为:
只要xpath_expr有效,并且xml_frag由正确嵌套和闭合的元素组成,则无论出于何种原因,如果没有为表达式找到匹配的文本节点(包括隐式/text())-for,则返回空字符串。
..。
如果xml_frag包含未正确嵌套或未正确关闭的元素,则返回NULL,并生成警告...
因此,如果您将任何有效的XPath表达式和任何有效的XML片段交给ExtractValue,那么您将得到一个非空的结果,但是如果您使用值XPath和无效的XML,您将得到一个空的结果。因此,您所需要做的就是构建一个INSERT和UPDATE触发器,这些触发器使用ExtractValue检查XML,并在得到NULL时使用signal引发异常:
select ExtractValue(new.your_xml_column, '/*') into @xml_check;
if @xml_check is null then
signal sqlstate '45000';
end if;https://stackoverflow.com/questions/10646431
复制相似问题