mysql存储过程 - 验证输入xml

时间:2012-05-18 03:43:38

标签: mysql xml stored-procedures

我有一个mysql 5.1,存储过程接受TEXT输入,该输入应该包含XML。

我可以成功解析XML并完成所需的一切。现在我正在处理错误处理部分,我需要知道如何确保输入XML格式正确且有效?

由于

1 个答案:

答案 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;
相关问题