我有一个mysql 5.1,它接受应该包含XML的文本输入的存储过程。
我可以成功地解析XML并完成所需的一切。现在我正在处理错误处理部分,我需要知道如何确保输入 XML 格式正确且有效?
谢谢
MySQL的XML支持中有任何内容说"这是格式良好的XML",但你可以伪造它。MySQL有一个ExtractValue
函数:
ExtractValue()
接受两个字符串参数,一个 XML 标记xml_frag
片段和一个 XPath 表达式xpath_expr
(也称为定位器(;它返回第一个文本节点的文本 (CDATA(,该节点是与 XPath 表达式匹配的元素的子节点。
但您也可以使用它来检查 XML,因为:
如果未找到表达式的匹配文本节点(包括隐式
/text()
(,无论出于何种原因,只要xpath_expr
有效,并且xml_frag
由正确嵌套和关闭的元素组成(,则返回空字符串。
[...]
如果xml_frag
包含未正确嵌套或关闭的元素,则返回NULL
,并生成警告...
因此,如果您交ExtractValue
任何有效的 XPath 表达式和任何有效的 XML 片段,那么您将得到一个非 NULL 结果,但如果您使用值 XPath 和无效的 XML,则会得到一个 NULL。因此,您需要做的就是构建一个 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;