KingbaseES 原生XML系列三--XML数据查询函数
KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS)
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函数简介
EXTRACT
功能:
extract会返回
xpath指定的节点的xml数据。
用法:
extract(xml_instance xml, xpath text)
示例:
test=# select extract(xmlarray , '/kes/version' ) ,xmlarray from xmldata ;
extract | xmlarray
------------------------------------------------------+-----------------------------------------------------------------
<version>v8r3001</version><version>v8r6001</version> | <kes><version>v8r3001</version><version>v8r6001</version></kes>
<version>v8r3002</version><version>v8r6002</version> | <kes><version>v8r3002</version><version>v8r6002</version></kes>
<version>v8r3003</version><version>v8r6003</version> | <kes><version>v8r3003</version><version>v8r6003</version></kes>
(3 行记录)
test=# select extract(xmldata , '/kes/sql' ) ,xmldata from xmldata ;
extract | xmldata
-------------------+-----------------------------------------------
<sql>sql001</sql> | <kes><sql>sql001</sql><rac>rac001</rac></kes>
<sql>sql002</sql> | <kes><sql>sql002</sql><rac>rac002</rac></kes>
<sql>sql003</sql> | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)
-- 获取节点属性值
test=# select extract('<kes><sql version="v8r6c7">sql001</sql><rac>rac001</rac></kes>','/kes/sql/@version') ;
extract
---------
v8r6c7
(1 行记录)
EXTRACTVALUE
功能:
函数extractvalue会返回
xpath指定的节点的值。如果节点的值是另一个节点,则不可获取,若指定节点路径存在多个相同节点,则会报错,也可通过数组形式,如:'/a/b[1]'指定返回具体节点。
用法:
extractvalue(xml_instance xml, xpath text)
extractvalue(xml_instance xml, xpath text, namespace _text)
示例:
test=# select extractvalue(xmldata , '/kes/sql' ) ,xmldata from xmldata ;
extractvalue | xmldata
--------------+-----------------------------------------------
sql001 | <kes><sql>sql001</sql><rac>rac001</rac></kes>
sql002 | <kes><sql>sql002</sql><rac>rac002</rac></kes>
sql003 | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)
-- 多个值时,报错。
test=# select extractvalue(xmlarray , '/kes/version' ) ,xmlarray from xmldata ;
错误: EXTRACTVALUE returns value of only one node
-- 多个值时,获取某个值
test=# select extractvalue(xmlarray , '/kes/version[1]' ) ,xmlarray from xmldata ;
extractvalue | xmlarray
--------------+-----------------------------------------------------------------
v8r3001 | <kes><version>v8r3001</version><version>v8r6001</version></kes>
v8r3002 | <kes><version>v8r3002</version><version>v8r6002</version></kes>
v8r3003 | <kes><version>v8r3003</version><version>v8r6003</version></kes>
(3 行记录)
EXISTSNODE
功能:
XML函数existsnode会遍历
xml实例,判断指定节点是否存在于实例中。若存在则返回1,不存在则返回0。
用法:
existsnode(text PASSING [BY { REF | VALUE }] xml [BY { REF | VALUE }])
existsnode(xml_instance xml, xpath text)
示例:
test=# select existsnode(xmldata , '/kes/sql'), existsnode(xmlarray,'/kes/version'), existsnode(xmldata , '/kes/noitem'), xmldata from xmldata ;
existsnode | existsnode | existsnode | xmldata
------------+------------+------------+-----------------------------------------------
1 | 1 | 0 | <kes><sql>sql001</sql><rac>rac001</rac></kes>
1 | 1 | 0 | <kes><sql>sql002</sql><rac>rac002</rac></kes>
1 | 1 | 0 | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)
XPATH
功能:
函数xpath在 XML 值
xml上计算 XPath 1.0 表达式 xpath (a text value)。它返回一个 XML 值的数组,该数组对应于该 XPath 表达式产生的结点集合。
用法:
xpath(xpath, xml [, nsarray])
示例:
test=# select xpath('/kes/*' , xmldata) from xmldata ;
xpath
---------------------------------------
{<sql>sql001</sql>,<rac>rac001</rac>}
{<sql>sql002</sql>,<rac>rac002</rac>}
{<sql>sql003</sql>,<rac>rac003</rac>}
(3 行记录)
XPATH_EXISTS
功能:
函数xpath_exists是xpath函数的一种特殊形式。它返回一个布尔值表示查询是否被满足
用法:
xpath_exists(xpath, xml [, nsarray])
示例:
test=# select xpath('/kes/sql' , xmldata) , xpath('/kes/no' , xmldata) from xmldata ;
xpath | xpath
---------------------+-------
{<sql>sql001</sql>} | {}
{<sql>sql002</sql>} | {}
{<sql>sql003</sql>} | {}
(3 行记录)
XMLEXISTS
功能:
XMLExists检查给定 XQuery 表达式是否返回非空 XQuery 序列。
用法:
XMLEXISTS(XQuery_string [XML_passing_clause])
XML_passing_clause:
PASSING [BY VALUE ] expr [AS identifier] [, ... ]
示例:
test=# SELECT xmlexists('/kes[text() = ''aaa'']' PASSING BY VALUE xmlvarchar) ,xmlvarchar from xmldata ;
xmlexists | xmlvarchar
-----------+----------------
t | <kes>aaa</kes>
f | <kes>bbb</kes>
f | <kes>ccc</kes>
(3 行记录)
test=# SELECT xmlexists('/kes/sql' PASSING BY VALUE xmldata) ,xmldata from xmldata;
xmlexists | xmldata
-----------+-----------------------------------------------
t | <kes><sql>sql001</sql><rac>rac001</rac></kes>
t | <kes><sql>sql002</sql><rac>rac002</rac></kes>
t | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)
KingbaseES 原生XML系列三--XML数据查询函数的更多相关文章
- 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面
一.创建脚本工具并执行初始迁移 在本节中,您将使用包管理控制台(PMC)来更新数据库: •添加VisualStudio Web代码生成包.这个包是运行脚本引擎所必需的. • 执行Add-Migrati ...
- Oracle系列(三): 情景查询一 a表中有个fid字段,逗号分隔开来,b表中有id字段及其他信息,如何关联a表的fid和和b表的id字段查询
现在有两个表,表a中 DOC FID 1 a,b,c 2 a,c,d 表b中 ID KEY a A b B c C d D 怎么联合查询出 DOC FID KEY 1 a,b,c A,B,C 2 a, ...
- infobright系列三:数据导入乱码
1:目前在用的是社区版的infobright,不支持DML功能,只能用LOAD DATA方式导入数据. 如果元数据中有特殊控制字符,导入过程中经常会报错 2: 设置Reject File导入之前,设定 ...
- 一步一步学EF系列三【数据迁移】
我们每篇的内容都不多,所以希望在学习的过程中最后能亲自敲一下代码 这样更有利于掌握. 我们现在接着上篇的例子,我们现在给随便的表增加一个字段 CreateTime 创建日期 运行一下 看看会怎么样 修 ...
- XML系列之--对电文格式XML的简单操作(三)
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- apache ignite系列(三):数据处理(数据加载,数据并置,数据查询)
使用ignite的一个常见思路就是将现有的关系型数据库中的数据导入到ignite中,然后直接使用ignite中的数据,相当于将ignite作为一个缓存服务,当然ignite的功能远不止于此,下面以 ...
- XQuery:查询任何可作为 XML 形态呈现的数据,包括数据库
XQuery 也被称为 XML Query,被设计用来查询 XML 数据. 学习这个 需要知道 HTML / XHTML XML / XML 命名空间 XPath XML 实例文档 我们将在下面的例子 ...
- iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍
网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...
- 网络相关系列之四:数据解析之SAX方式解析XML数据
一.XML和Json数据的引入: 通常情况下.每一个须要訪问网络的应用程序都会有一个自己的server.我们能够向server提交数据,也能够从server获取数据.只是这个时候就有一个问题,这些数据 ...
- solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据
solr与.net系列课程(四)solr查询参数的讲解与.net如何获取solr数据 上一节我们完成了solr连接数据库,细心的朋友会发现一个问题,就是solr其实和语言没有任何关系,配置完成后任何语 ...
随机推荐
- Swoole从入门到入土(7)——TCP服务器[大杂烩]
这一篇是异步风格的TCP服务器的最后一篇,主要的目的是疏理之前几篇没提到的一些比较有用的属性.配置.函数与事件,当然不是全部.如果想知道全部,请查看官网. 1.属性 Swoole\Server-> ...
- Java I/O 教程(二) 介绍OutputStream 和 InputStream
OutputStream vs InputStream 我们来看一下两者的工作图: OutputStream 输出流 Java应用程序使用输出流将数据写入到某个目的地,可以是一个文件,数组,外围设备或 ...
- win32 - 从dll中导出api并使用
从User32.dll中导出MessageBoxW 代码: #include <Windows.h> #include <iostream> #include <func ...
- C++ STL学习
C++ STL学习 目录 C++ STL学习 容器库概览 对可以保存在容器中的元素的限制 容器支持的操作 所有容器都支持的操作或容器成员 迭代器 迭代器的公共操作 迭代器的类型 迭代器的const属性 ...
- 文心一言 VS 讯飞星火 VS chatgpt (201)-- 算法导论15.2 6题
六.用go语言,证明:对 n 个元素的表达式进行完全括号化,恰好需要 n-1 对括号. 文心一言,代码正常运行: 在Go语言中,证明对n个元素的表达式进行完全括号化恰好需要n-1对括号,可以通过数学归 ...
- docker部署fastdfs并在Django中集成
拉取Fastdfs镜像 docker pull delron/fastdfs 构建Tracker容器 是在Linux环境下,使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作 ...
- 从真实案例出发,全方位解读 NebulaGraph 中的执行计划
本文整理自 NebulaGraph 核心开发 Yee 在直播<聊聊执行计划这件事>中的主题分享.分享视频参见 B站:https://www.bilibili.com/video/BV1Cu ...
- C/C++ 的 指针/引用 传参
#include <stdio.h> //指针传值 void addOne(int *a) { printf("%8p\n",a); *a = *a+1; } //引用 ...
- Android系统瘦身
文件格式: Windows常见的文件系统是FAT16.FAT32,NTFS,在Windows环境提供了分区格式转换工具,可以在DOC环境下 使用 Convert命令(Convert e:/fs:nt ...
- Nfs 共享存储搭建
Nfs 共享存储搭建 为了实现不同操作系统中的数据共享,我们一般会搭建一些用于文件共享的服务器,nfs服务器就是其中一种,它实现的是linux与linux之间的共享.今天我将把如何在linux系统搭建 ...