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之Dropdown

    1 Dropdown属性面板 ​ 在 Hierarchy 窗口右键,选择 UI 列表里的 Dwondown (下拉列表)控件,即可创建 Dwondown 控件,选中创建的 Dwondown 控件,按键 ...

  2. Java设计模式-中介者模式Mediator

    介绍 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式属于行 ...

  3. Android里使用AspectJ实现AOP

     前言 Aspectj提供一种在字符串里编程的模式,即在字符串里写函数,然后程序启动的时候会动态的把字符串里的函数给执行了. 例如: "execution(* *(..))" 这里 ...

  4. win32 - 从dll中导出api并使用

    从User32.dll中导出MessageBoxW 代码: #include <Windows.h> #include <iostream> #include <func ...

  5. win32 - 虚拟内存的一些介绍

    对32位Windows来说,其虚拟地址空间总数就是2的32次方,即4GB. 如果没有在引导时加上/3GB或/BOOTVA选项,Windows默认最大会分2GB给内核模式程序使用,2GB给用户模式程序. ...

  6. 3D环饼图

    // <div class="AnalysisAccCom">         <first-title title="分析对象统计"> ...

  7. 2021-07-01 原生js获取文件数据

    原理 手动用js创建一个type为file的DOM元素. 在读取到数据后,清空手动创建的DOM元素.返回得到的Promise类型的文件数据files. const getFilesPromise = ...

  8. ThreadLocal的应用场景和注意事项有哪些?

    https://cloud.tencent.com/developer/article/1618405

  9. Java 辨析之实例化和初始化

    在面向对象编程中,实例化和初始化是两个相关但不同的概念: 实例化(Instantiation): 实例化是指创建一个类的新的具体对象的过程.当程序运行时,通过 new 关键字调用类的构造函数来创建该类 ...

  10. 私有网盘服务 dzzoffice部署

    官网地址: https://dzzoffice.com/ dzzoffice有多种部署方式, docker方式,源码方式, 经过测试,这两种部署方式在数据进行备份恢复时都会存在一些bug, 所有这里采 ...