1

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

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

谢谢

4

1 回答 1

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;
于 2012-05-18T04:20:51.930 回答