当前位置: 首页 > news >正文

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函数列表

  • EXTRACT
  • EXTRACTVALUE
  • EXISTSNODE
  • XPATH
  • XPATH_EXISTS
  • XMLEXISTS

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数据查询函数

KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使其易于在任何应用程序中读写数据&#xff0c;这使XML很快成为数据交换的一种公共语言。在不同平台下产生的信息&#xff0c;可以很容易加载XML数据到程序…...

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;基础内容 &#x1f3f3…...

数据可视化工具 - ECharts以及柱状图的编写

1 快速上手 引入echarts 插件文件到html页面中 <head><meta charset"utf-8"/><title>ECharts</title><!-- step1 引入刚刚下载的 ECharts 文件 --><script src"./echarts.js"></script> </head>准备一个…...

【AI绘画】——Midjourney关键词格式解析(常用参数分享)

目前在AI绘画模型中&#xff0c;Midjourney的效果是公认的top级别&#xff0c;但同时也是相对较难使用的&#xff0c;对小白来说比较难上手&#xff0c;主要就在于Mj没有webui&#xff0c;不能选择参数&#xff0c;怎么找到这些隐藏参数并且触发它是用好Mj的第一步。 今天就来…...

操作符知识点大全(简洁,全面,含使用场景,演示,代码)

目录 一.算术操作符 1.要点&#xff1a; 二.负数原码&#xff0c;反码&#xff0c;补码的互推 1.按位取反操作符&#xff1a;~&#xff08;二进制位&#xff09; 2.原反补互推演示 三.进制位的表示 1.不同进制位的特征&#xff1a; 2.二进制位表示 3.整型的二进制表…...

华工研究生语音课

这门课讲啥 语音蕴含的信息、语音识别的目的 语音的准平稳性、分帧、预加重、时域特征分析&#xff08;能量和过零率&#xff09;、端点检测&#xff08;双门限法&#xff09; 语音的基频及检测&#xff08;主要是自相关法、野点的处理&#xff09; 声音的产生过程&#xf…...

KingbaseES 原生XML系列二 -- XML数据操作函数

KingbaseES 原生XML系列二--XML数据操作函数(DELETEXML,APPENDCHILDXML,INSERTCHILDXML,INSERTCHILDXMLAFTER,INSERTCHILDXMLBEFORE,INSERTXMLAFTER,INSERTXMLBEFORE,UPDATEXML) XML的简单使其易于在任何应用程序中读写数据&#xff0c;这使XML很快成为数据交换的一种公共语言。…...

【Flink】DataStream API使用之源算子(Source)

源算子 创建环境之后&#xff0c;就可以构建数据的业务处理逻辑了&#xff0c;Flink可以从各种来源获取数据&#xff0c;然后构建DataStream进项转换。一般将数据的输入来源称为数据源&#xff08;data source&#xff09;&#xff0c;而读取数据的算子就叫做源算子&#xff08…...

树莓派硬件介绍及配件选择

目录 树莓派Datasheet下载地址&#xff1a; Raspberry 4B 外观图&#xff1a; 技术规格书&#xff1a; 性能介绍&#xff1a; 树莓派配件选用 电源的选用&#xff1a; 树莓派外壳选用&#xff1a; 内存卡/U盘选用 树莓派Datasheet下载地址&#xff1a; Raspberry Pi …...

O2OA (翱途) 平台 V8.0 发布新增数据台账能力

亲爱的小伙伴们&#xff0c;O2OA (翱途) 平台开发团队经过几个月的持续努力&#xff0c;实现功能的新增、优化以及问题的修复。2023 年度 V8.0 版本已正式发布。欢迎大家到 O2OA 的官网上下载进行体验&#xff0c;也希望大家在藕粉社区里多提宝贵建议。本篇我们先为大家介绍应用…...

数控解锁怎么解 数控系统解锁解密

Amazon Fargate 在中国区正式落地&#xff0c;因 数控解锁使用 Serverless 架构&#xff0c;更加适合对性能要求不敏感的服务使用&#xff0c;Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具&#xff0c;Pyroscope 的服务端为无状态服务且性能要求不敏感&#xff0c;…...

3.0 响应式系统的设计与实现

1、Proxy代理对象 Proxy用于对一个普通对象代理&#xff0c;实现对象的拦截和自定义&#xff0c;如拦截其赋值、枚举、函数调用等。里面包含了很多组捕获器&#xff08;trap&#xff09;&#xff0c;在代理对象执行相应的操作时捕获&#xff0c;然后在内部实现自定义。 const…...

Rust 快速入门60分① 看完这篇就能写代码了

Rust 一门赋予每个人构建可靠且高效软件能力的语言https://hannyang.blog.csdn.net/article/details/130467813?spm1001.2014.3001.5502关于Rust安装等内容请参考上文链接&#xff0c;写完上文就在考虑写点关于Rust的入门文章&#xff0c;本专辑将直接从Rust基础入门内容开始讲…...

【5.JS基础-JavaScript的DOM操作】

1 认识DOM和BOM 所以我们学习DOM&#xff0c;就是在学习如何通过JavaScript对文档进行操作的&#xff1b; DOM Tree的理解 DOM的学习顺序 DOM的继承关系图 2 document对象 3 节点&#xff08;Node&#xff09;之间的导航&#xff08;navigator&#xff09; 4 元素&#xff0…...

【大数据之Hadoop】二十九、HDFS存储优化

纠删码和异构存储测试需要5台虚拟机。准备另外一套5台服务器集群。 环境准备&#xff1a; &#xff08;1&#xff09;克隆hadoop105为hadoop106&#xff0c;修改ip地址和hostname&#xff0c;然后重启。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname r…...

SuperMap GIS基础产品组件GIS FAQ集锦(2)

SuperMap GIS基础产品组件GIS FAQ集锦&#xff08;2&#xff09; 【iObjects for Spark】读取GDB参数该如何填写&#xff1f; 【解决办法】可参考以下示例&#xff1a; val GDB_params new util.HashMapString, java.io.Serializable GDB_params.put(FeatureRDDProviderParam…...

C语言printf()函数中整型格式说明符详解

每个整型在printf()函数中对应不同的格式说明符,以实现该整型的打印输出。格式说明符必须使用小写。现在让我们看看各个整型及其格式说明符: 短整型(short) 10进制:%hd16进制:无负数格式,正数使用%hx8进制:无负数格式,正数使用%ho c short s 34; printf("%hd", s…...

阿里云服务器地域和可用区怎么选择合适?

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…...

Java序列化引发的血案

1、引言 阿里巴巴Java开发手册在第一章节&#xff0c;编程规约中OOP规约的第15条提到&#xff1a; **【强制】**序列化类新增属性时&#xff0c;请不要修改serialVersionUID字段&#xff0c;避免反序列失败&#xff1b;如果完全不兼容升级&#xff0c;避免反序列化混乱&#x…...

为Linux系统添加一块新硬盘,并扩展根目录容量

我的原来ubuntu20.04系统装的时候不是LVM格式的分区&#xff0c; 所以先将新硬盘转成LVM&#xff0c;再将原来的系统dd到新硬盘&#xff0c;从新硬盘的分区启动&#xff0c;之后再将原来的分区转成LVM&#xff0c;在融入进来 1&#xff1a;将新硬盘制作成 LVM分区 我的新硬盘…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...