MySQL存储过程 — 解析 XML 数据并实现插入操作
一、概述:
最近在做项目的过程中,需要利用MySQL存储过程 解析 XML数据并进行插入操作,因此就学习了下。MySQL 解析 XML 的思路就是使用 MySQL自带的 extractvalue ()函数 并根据传入XPath路径来获取相应的值,这个思路和他其他的语言的获取XML节点值差不多,只是写法不同。(更好的阅读体验,请移步我的个人博客)
二、代码实现:
1,待解析的XML字符串:
<?xml version="1.0" encoding="utf-8"?>
<cInfo>
<cId>155728471173781</cId>
<cName>存储过程</cName>
<location>安徽</location>
<remark>背景</remark>
<createtime>1557284711889</createtime>
</cInfo>
2,存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `addcustomer`(IN ucs_info VARCHAR(300))
BEGIN
#声明需要用到的变量
DECLARE cId BIGINT;
DECLARE cName VARCHAR(200);
DECLARE location VARCHAR(200);
DECLARE remark VARCHAR(200);
DECLARE createtime VARCHAR(200);
#获取值
SET @cId = extractvalue(ucs_info,'/cInfo/cId');
SET @cName = extractvalue(ucs_info,'/cInfo/cName');
SET @location = extractvalue(ucs_info,'/cInfo/location');
SET @remark = extractvalue(ucs_info,'/cInfo/remark');
SET @createtime = extractvalue(ucs_info,'/cInfo/createtime');
#插入数据库
INSERT INTO customer(c_id,c_name,location,remark,c_info) VALUES(@cId,@cName,@location,@remark,ucs_info );
#显示出来,这里只是判断读取的是否正确
select @cId cId, @cName cName, @location location ,@remark remark,FROM_UNIXTIME(@createtime) createtime;
END
3,调用存储过程 :
call addcustomer("待解析的XML字符串")
4,结果:
5,总结:
MySQL存储过程解析XML的流程就是:
1,先建立一个存储过程,参数是待解析的XMl;
2, 调用 extractvalue() 函数,传入 XML 字符串 以及 节点路径。(节点路径的写法 采用的是 XPath,可自行搜索。)