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