程序员在旅途

用这生命中的每一秒,给自己一个不后悔的未来!

0%

MySQL存储过程 — 解析 XML 数据并实现插入操作

一、概述

  最近在做项目的过程中,需要利用MySQL存储过程 解析 XML数据并进行插入操作,因此就学习了下。MySQL 解析 XML 的思路就是使用 MySQL自带的 extractvalue ()函数 并根据传入XPath路径来获取相应的值,这个思路和他其他的语言的获取XML节点值差不多,只是写法不同。

二、代码实现

  1,待解析的XML字符串:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<cInfo>
<cId>155728471173781</cId>
<cName>存储过程</cName>
<location>安徽</location>
<remark>背景</remark>
<createtime>1557284711889</createtime>
</cInfo>

  2,存储过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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、调用存储过程

1
call addcustomer("待解析的XML字符串")

4、结果

结果

5、总结

  MySQL存储过程解析XML的流程就是:

1,先建立一个存储过程,参数是待解析的XMl;
2, 调用 extractvalue() 函数,传入 XML 字符串 以及 节点路径。(节点路径的写法 采用的是 XPath,可自行搜索。)