我有一个mysql 5.1,存储过程接受TEXT输入,该输入应该包含XML。
我可以成功解析XML并完成所需的一切。现在我正在处理错误处理部分,我需要知道如何确保输入XML格式正确且有效?
由于
答案 0 :(得分: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;