KingbaseES 原生XML系列二--XML数据操作函数(DELETEXML,APPENDCHILDXML,INSERTCHILDXML,INSERTCHILDXMLAFTER,INSERTCHILDXMLBEFORE,INSERTXMLAFTER,INSERTXMLBEFORE,UPDATEXML)

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的一种公共语言。在不同平台下产生的信息,可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

xml数据类型可以被用来存储XML数据。它比直接在一个text域中存储XML数据的优势在于,它会检查输入值的结构是不是良好,并且有支持函数用于在其上执行类型安全的操作。

本文详细介绍了KingbaseES中集成的相关xml数据操作函数使用。

准备数据:

CREATE TABLE "public"."xmldata" (
"id" integer NULL,
"comm" varchar NULL,
"xmlvarchar" varchar NULL,
"xmldata" xml NULL,
"XMLarray" xml NULL
); INSERT INTO xmldata values(1, 'zhangsan' , '<kes>aaa</kes>' , '<kes><sql>sql001</sql><rac>rac001</rac></kes>' , '<kes><version>v8r3001</version><version>v8r6001</version></kes>');
INSERT INTO xmldata values(2, 'lisi' , '<kes>bbb</kes>' , '<kes><sql>sql002</sql><rac>rac002</rac></kes>' , '<kes><version>v8r3002</version><version>v8r6002</version></kes>');
INSERT INTO xmldata values(3, 'wangwu' , '<kes>ccc</kes>' , '<kes><sql>sql003</sql><rac>rac003</rac></kes>' , '<kes><version>v8r3003</version><version>v8r6003</version></kes>');

xml函数列表

json函数简介

DELETEXML

功能:

函数deletexml会删除xml_instance实例中与xpath表达式匹配的节点。

每次删除指定的一层节点,若一层含有多个节点,则该层所有节点都将被删除。若删除节点后父节点值为空,则父节点只显示结尾部分,否则显示完整父节点及父节点的其他值。

用法:

deletexml(xml_instance xml, xpath text)
deletexml(xml_instance xml, xpath text, namespace _text)

示例:

test=# select deletexml(xmlvarchar , '/kes') , xmlvarchar from xmldata ;
deletexml | xmlvarchar
-----------+----------------
| <kes>aaa</kes>
| <kes>bbb</kes>
| <kes>ccc</kes>
(3 行记录) test=# select deletexml(xmldata , '/kes/sql') , xmldata from xmldata ;
deletexml | xmldata
---------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<rac>rac001</rac>+|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<rac>rac002</rac>+|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<rac>rac003</rac>+|
</kes> |
(3 行记录) test=# select deletexml(xmlarray , '/kes/version') , xmlarray from xmldata ;
deletexml | xmlarray
-----------+-----------------------------------------------------------------
<kes/> | <kes><version>v8r3001</version><version>v8r6001</version></kes>
<kes/> | <kes><version>v8r3002</version><version>v8r6002</version></kes>
<kes/> | <kes><version>v8r3003</version><version>v8r6003</version></kes>
(3 行记录)

APPENDCHILDXML

功能:

函数appendchildxml将value_expr提供的值作为xpath节点的子节点追加到xml_instance中。成功则返回追加后的xml_instance数据,失败则返回ERROR。

用法:

appendchildxml(xml_instance xml,  xpath text , value_expr xml)

示例:

test=# select appendchildxml(xmldata , '/kes' ,xmlvarchar) , xmldata , xmlvarchar from xmldata ;
appendchildxml | xmldata | xmlvarchar
---------------------+-----------------------------------------------+----------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes> | <kes>aaa</kes>
<sql>sql001</sql>+| |
<rac>rac001</rac>+| |
<kes>aaa</kes> +| |
</kes> | |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes> | <kes>bbb</kes>
<sql>sql002</sql>+| |
<rac>rac002</rac>+| |
<kes>bbb</kes> +| |
</kes> | |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes> | <kes>ccc</kes>
<sql>sql003</sql>+| |
<rac>rac003</rac>+| |
<kes>ccc</kes> +| |
</kes> | |
(3 行记录)

INSERTCHILDXML

功能:

函数insertchildxml将value_expr提供的值作为xpath指定节点的子节点插入到xml_instance中。成功则返回插入后的xml_instance数据,失败则返回ERROR。

用法:

insertchildxml(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxml(xml_instance xml, xpath text , child_expr text ,value_expr xml, namespace _text)

示例:

test=# select insertchildxml(xmldata , '/kes' , 'cluster' , '<cluster>nodes</cluster>') ,xmldata from xmldata ;
insertchildxml | xmldata
----------------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<sql>sql001</sql> +|
<rac>rac001</rac> +|
<cluster>nodes</cluster>+|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<sql>sql002</sql> +|
<rac>rac002</rac> +|
<cluster>nodes</cluster>+|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<sql>sql003</sql> +|
<rac>rac003</rac> +|
<cluster>nodes</cluster>+|
</kes> |
(3 行记录) -- 数组数据插入
test=# select insertchildxml(XMLarray , '/kes' , 'cluster' , '<cluster>nodes</cluster>') , XMLarray from xmldata ;
insertchildxml | XMLarray
------------------------------+-----------------------------------------------------------------
<kes> +| <kes><version>v8r3001</version><version>v8r6001</version></kes>
<version>v8r3001</version>+|
<version>v8r6001</version>+|
<cluster>nodes</cluster> +|
</kes> |
<kes> +| <kes><version>v8r3002</version><version>v8r6002</version></kes>
<version>v8r3002</version>+|
<version>v8r6002</version>+|
<cluster>nodes</cluster> +|
</kes> |
<kes> +| <kes><version>v8r3003</version><version>v8r6003</version></kes>
<version>v8r3003</version>+|
<version>v8r6003</version>+|
<cluster>nodes</cluster> +|
</kes> |
(3 行记录)

INSERTCHILDXMLAFTER

功能:

函数insertchildxmlafter将value_expr提供的一个或多个集合元素作为xpath指定的目标父元素的子元素插入到child_expr指定的现有集合元素之后。成功则返回插入后的xml_instance数据,失败则返回ERROR。

用法:

insertchildxmlafter(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxmlafter(xml_instance xml, xpath text , child_expr text ,value_expr xml,namespace _text)

示例:

test=# select insertchildxmlafter(xmldata , '/kes','sql','<cluster>nodes</cluster>') ,xmldata from xmldata ;
insertchildxmlafter | xmldata
----------------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<sql>sql001</sql> +|
<cluster>nodes</cluster>+|
<rac>rac001</rac> +|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<sql>sql002</sql> +|
<cluster>nodes</cluster>+|
<rac>rac002</rac> +|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<sql>sql003</sql> +|
<cluster>nodes</cluster>+|
<rac>rac003</rac> +|
</kes> |
(3 行记录) -- 数组数据插入
test=# select insertchildxmlafter(xmlarray ,'/kes','version[1]' ,'<cluster>nodes</cluster>') ,xmlarray from xmldata ;
insertchildxmlafter | xmlarray
------------------------------+-----------------------------------------------------------------
<kes> +| <kes><version>v8r3001</version><version>v8r6001</version></kes>
<version>v8r3001</version>+|
<cluster>nodes</cluster> +|
<version>v8r6001</version>+|
</kes> |
<kes> +| <kes><version>v8r3002</version><version>v8r6002</version></kes>
<version>v8r3002</version>+|
<cluster>nodes</cluster> +|
<version>v8r6002</version>+|
</kes> |
<kes> +| <kes><version>v8r3003</version><version>v8r6003</version></kes>
<version>v8r3003</version>+|
<cluster>nodes</cluster> +|
<version>v8r6003</version>+|
</kes> |
(3 行记录)

INSERTCHILDXMLBEFORE

功能:

函数insertchildxmlbefore将value_expr提供的一个或多个集合元素作为xpath指定的目标父元素的子元素插入到child_expr指定的现有集合元素之前。成功则返回插入后的xml_instance数据,失败则返回ERROR。

用法:

insertchildxmlbefore(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxmlbefore(xml_instance xml, xpath text , child_expr text , value_expr xml,namespace _text)

示例:

test=# select insertchildxmlbefore(xmldata , '/kes','sql','<cluster>nodes</cluster>') ,xmldata from xmldata ;
insertchildxmlbefore | xmldata
----------------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql001</sql> +|
<rac>rac001</rac> +|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql002</sql> +|
<rac>rac002</rac> +|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql003</sql> +|
<rac>rac003</rac> +|
</kes> |
(3 行记录) -- 数组数据插入
test=# select insertchildxmlbefore(xmlarray ,'/kes','version[1]' ,'<cluster>nodes</cluster>') ,xmlarray from xmldata ;
insertchildxmlbefore | xmlarray
------------------------------+-----------------------------------------------------------------
<kes> +| <kes><version>v8r3001</version><version>v8r6001</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3001</version>+|
<version>v8r6001</version>+|
</kes> |
<kes> +| <kes><version>v8r3002</version><version>v8r6002</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3002</version>+|
<version>v8r6002</version>+|
</kes> |
<kes> +| <kes><version>v8r3003</version><version>v8r6003</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3003</version>+|
<version>v8r6003</version>+|
</kes> |
(3 行记录)

INSERTXMLAFTER

功能:

函数insertxmlafter将value_expr提供的值插入到xpath指定的节点之后。成功则返回插入后的xml_instance数据,失败则返回ERROR。

用法:

insertxmlafter(xml_instance xml,  xpath text , value_expr xml)
insertxmlafter(xml_instance xml, xpath text , value_expr xml,namespace _text)

示例:

test=# select insertxmlafter(xmldata ,'/kes/sql' ,'<cluster>nodes</cluster>') ,xmldata  from xmldata ;
insertxmlafter | xmldata
----------------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<sql>sql001</sql> +|
<cluster>nodes</cluster>+|
<rac>rac001</rac> +|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<sql>sql002</sql> +|
<cluster>nodes</cluster>+|
<rac>rac002</rac> +|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<sql>sql003</sql> +|
<cluster>nodes</cluster>+|
<rac>rac003</rac> +|
</kes> |
(3 行记录) -- 数组数据插入
test=# select insertxmlafter(xmlarray ,'/kes/version[1]' ,'<cluster>nodes</cluster>') , xmlarray from xmldata ;
insertxmlafter | xmlarray
------------------------------+-----------------------------------------------------------------
<kes> +| <kes><version>v8r3001</version><version>v8r6001</version></kes>
<version>v8r3001</version>+|
<cluster>nodes</cluster> +|
<version>v8r6001</version>+|
</kes> |
<kes> +| <kes><version>v8r3002</version><version>v8r6002</version></kes>
<version>v8r3002</version>+|
<cluster>nodes</cluster> +|
<version>v8r6002</version>+|
</kes> |
<kes> +| <kes><version>v8r3003</version><version>v8r6003</version></kes>
<version>v8r3003</version>+|
<cluster>nodes</cluster> +|
<version>v8r6003</version>+|
</kes> |
(3 行记录)

INSERTXMLBEFORE

功能:

函数insertxmlbefore将value_expr提供的值插入到xpath指定的节点之前。成功则返回插入后的xml_instance数据,失败则返回ERROR。

用法:

insertxmlbefore(xml_instance xml,  xpath text , value_expr xml)
insertxmlbefore(xml_instance xml, xpath text , value_expr xml,namespace _text)

示例:

test=# select insertxmlbefore(xmldata ,'/kes/sql' ,'<cluster>nodes</cluster>') ,xmldata  from xmldata ;
insertxmlbefore | xmldata
----------------------------+-----------------------------------------------
<kes> +| <kes><sql>sql001</sql><rac>rac001</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql001</sql> +|
<rac>rac001</rac> +|
</kes> |
<kes> +| <kes><sql>sql002</sql><rac>rac002</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql002</sql> +|
<rac>rac002</rac> +|
</kes> |
<kes> +| <kes><sql>sql003</sql><rac>rac003</rac></kes>
<cluster>nodes</cluster>+|
<sql>sql003</sql> +|
<rac>rac003</rac> +|
</kes> |
(3 行记录) -- 数组数据插入
test=# select insertxmlbefore(xmlarray ,'/kes/version[1]' ,'<cluster>nodes</cluster>') , xmlarray from xmldata ;
insertxmlbefore | xmlarray
------------------------------+-----------------------------------------------------------------
<kes> +| <kes><version>v8r3001</version><version>v8r6001</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3001</version>+|
<version>v8r6001</version>+|
</kes> |
<kes> +| <kes><version>v8r3002</version><version>v8r6002</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3002</version>+|
<version>v8r6002</version>+|
</kes> |
<kes> +| <kes><version>v8r3003</version><version>v8r6003</version></kes>
<cluster>nodes</cluster> +|
<version>v8r3003</version>+|
<version>v8r6003</version>+|
</kes> |
(3 行记录)

UPDATEXML

功能:

函数updatexml将xml_instance实例中xpath指定的节点内容替换为value_expr提供的值,成功则返回更新后的xml_instance实例,失败则返回ERROR。

用法:

updatexml(xml_instance xml, xpath text, value_expr xml)
updatexml(xml_instance xml, xpath text, value_expr text)
updatexml(xml_instance xml, xpath text, value_expr text, namespace text)

示例:

test=# select updatexml(xmlvarchar ,'/kes' ,'<kes>xxx</kes>' ) , xmlvarchar from xmldata ;
updatexml | xmlvarchar
----------------+----------------
<kes>xxx</kes> | <kes>aaa</kes>
<kes>xxx</kes> | <kes>bbb</kes>
<kes>xxx</kes> | <kes>ccc</kes>
(3 行记录)

KingbaseES 原生XML系列二 -- XML数据操作函数的更多相关文章

  1. Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作

    详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 这篇主 ...

  2. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  3. Jq_Ajax 操作函数跟JQuery 遍历函数跟JQuery数据操作函数

    JQuery文档操作方法 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 函数                             ...

  4. 【summary】JQuery 相关css、ajax、数据操作函数或方法

    总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...

  5. ORACLE链接SQLSERVER数据库数据操作函数范例

    ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...

  6. 学习ASP.NET Core Blazor编程系列二十一——数据刷新

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  7. mysql全家桶(二)数据操作

    一.数据操作1.增#新增insert into 表名(字段列表) values(值列表);INSERT INTO table_name ( field1, field2,...fieldN ) VAL ...

  8. WebService(2)-XML系列之用Stax操作Xml

    源代码下载:链接: http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:利用Stax处理xml文档 一.读取xml 1.基于光标的查找 核心:X ...

  9. Python股票分析系列——基础股票数据操作(二).p4

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...

  10. Redis学习二(数据操作).

    key 操作 删除 key:del key 批量删除key:redis-cli -a(密码)keys "QXJ_*"| xargs redis-cli -a(密码)del 查看所有 ...

随机推荐

  1. 【Unity3D】UGUI之Slider

    1 Slider属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Slider 控件,即可创建 Slider 控件,选中创建的 Slider 控件,按键盘[T]键,可以调整 Sli ...

  2. 【Android】使用MediaExtractor获取关键帧的时间戳

    1 前言 使用MediaExtractor.MediaMuxer去掉视频文件中的音频数据 中介绍了 MediaExtractor 类的主要方法,本文主要将使用其 advance() 和 seekTo( ...

  3. 细说 QUEST CENTRAL FOR DB2 八宗罪

    作为一个从事oracle plsql开发2年的程序员,如今跳槽从事DB2数据仓库项目. 以PL/SQL Developer为参考,以下简称PLSQL,细说QUEST CENTRAL FOR DB2 5 ...

  4. zabbix-server.service failed解决方法

    1.问题描述 centos7中安装的zabbix server在重启系统后无法启动了,查看状态报错如下: 2.问题原因 selinux没有关闭! 3.解决 永久关闭selinux, 将SELINUX值 ...

  5. spring boot和redis实现自定义前后分离token认证

    说明:文章部分代码引用自github 本项目地址:https://gitee.com/indexman/redis-token-demo 1.token认证流程 此处以前端页面请求后端用户列表接口为例 ...

  6. Java I/O 教程(八) Writer和Reader

    Java Writer Writer是一个用于写字符流的抽象类.其子类必须实现write(char[], int, int), flush(), 和 close()方法. 类定义 public abs ...

  7. 使用paramiko模块远程连接遇到paramiko.ssh_exception.NoValidConnectionsError的解决办法

    连接时报错paramiko.ssh_exception.NoValidConnectionsError, 解决办法 首先在ubuntu终端上输入:cat /etc/ssh/ssh_config,查看端 ...

  8. Flask学习(三)

    数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...

  9. yolov5项目cuda错误解决

    CUDA报错解决 # 报错详情 AssertionError: CUDA unavailable, invalid device 0 requested 查看cuda版本 先看一下电脑是否支持GPU, ...

  10. 问题:django中对datetime类型数据在pycharm中sqlite3进行修改时,修改后datetime日期数据变成了时间戳类型

    这是正在修改的 提交完之后 问题原因 问题原因是sqlite数据库对日期类型不敏感,Pycharm直接插入会变成图中这样的时间戳,用POST请求添加数据或Django自带的后台管理插入不会有这样的问题 ...