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其实和语言没有任何关系,配置完成后任何语 ...
随机推荐
- Function与Object
Function与Object JavaScript中内置了两个顶级对象Function.Object,Object是所有对象的基类,而所有的构造函数同时又是Function对象的实例. Object ...
- el-dialog关闭后重置表单和校验提示
问题说明 最近测试反馈操作某新增/修改表单,点击[取消]或[关闭]窗口后再次点击[新增]或[修改]发现校验提示仍然存在! 问题原因 项目采用Vue+ElementUI,修改表单的窗口控件采用el-di ...
- 深入理解Go语言(08):sync.WaitGroup源码分析
一.sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务 ...
- ASP.NET Core MVC应用模型的构建[1]: 应用的蓝图
我个人觉得这是ASP.NET Core MVC框架体系最核心的部分.原因很简单,MVC框架建立在ASP.NET Core路由终结点上,它最终的目的就是将每个Action方法映射为一个或者多个路由终结点 ...
- zlib开发笔记(一):zlib库介绍、编译和工程模板
前言 Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库. zlib库 zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可 ...
- maketrans和translate按规则一次性替换多个字符,用来替代replace
str_ = 'i love you' compiler_ = str_.maketrans('i l y', 'I L Y') print(str_.translate(compiler_))
- python内置模块argparse的使用
官网文档 https://docs.python.org/3/howto/argparse.html # 简易教程 https://docs.python.org/3/library/argparse ...
- 解读平台工程,DevOps真的死了吗?不,它只是换了个马甲而已,弥补了DevOps空心理论,让DevOps继续发展壮大
最**台工程这个概念越来越火爆,Gartner 的预测,到 2026 年,80% 的软件工程组织将拥有*台工程团队,来提供内部服务.组件和应用程序交付工具,作为可重复使用的资源.本篇文章将带你走进*台 ...
- Elasticsearch系列之-windows安装和基础操作
ElasticSearch安装 安装JDK环境 因为ElasticSearch是用Java语言编写的,所以必须安装JDK的环境,并且是JDK 1.8以上 官网:https://www.oracle.c ...
- 【NLP学习其3.5】词嵌入的特性,为什么词之间会有联系?
词嵌入的特性 现在你有了一堆嵌入向量,我们可以开始学习他们之间的特性了 前情提要:https://www.cnblogs.com/DAYceng/p/14962528.html 先把各向量重新命名便于 ...