首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql存储过程-验证输入xml

问mysql存储过程-验证输入xml
EN

Stack Overflow用户
提问于 2012-05-18 11:43:38
回答 1查看 1.3K关注 0票数 1

我有一个MySQL5.1存储过程,它接受应该包含XML的文本输入。

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-18 12:20:52

我不知道MySQL的XML支持中有什么写着“这是格式良好的XML”,但是你可以伪造它。MySQL有一个ExtractValue函数:

XML接受两个字符串参数,一个是xml_frag标记片段,另一个是XPath表达式xml_frag(也称为定位器);它返回第一个文本节点的文本(CDATA),该节点是与XPath表达式匹配的元素的子元素。

但是您也可以使用它来检查XML,因为:

只要xpath_expr有效,并且xml_frag由正确嵌套和闭合的元素组成,则无论出于何种原因,如果没有为表达式找到匹配的文本节点(包括隐式/text())-for,则返回空字符串。

..。

如果xml_frag包含未正确嵌套或未正确关闭的元素,则返回NULL,并生成警告...

因此,如果您将任何有效的XPath表达式和任何有效的XML片段交给ExtractValue,那么您将得到一个非空的结果,但是如果您使用值XPath和无效的XML,您将得到一个空的结果。因此,您所需要做的就是构建一个INSERT和UPDATE触发器,这些触发器使用ExtractValue检查XML,并在得到NULL时使用signal引发异常:

代码语言:javascript
复制
select ExtractValue(new.your_xml_column, '/*') into @xml_check;
if @xml_check is null then
    signal sqlstate '45000';
end if;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10646431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档