KingbaseES 原生XML系列一 -- XML构造函数

发布时间 2023-05-09 19:41:51作者: KINGBASE研究院

KingbaseES 原生XML系列一--XML构造函数(XML,XMLPARSE,XMLSERIALIZE,IS-DOCUMENT,XML_IS_WELL_FORMED,XML_IS_WELL_FORMED_CONTENT,XML_IS_WELL_FORMED_DOCUMENT)

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函数简介

XML

功能:

从字符数据中生成一个xml类型的值。

用法:

xml( text )

示例:

test=# select xml(comm) ,sys_typeof( xml(comm)),comm from xmldata ;
   xml    | sys_typeof |   comm   
----------+------------+----------
 zhangsan | xml        | zhangsan
 lisi     | xml        | lisi
 wangwu   | xml        | wangwu
(3 行记录)

XMLPARSE

功能:

从字符数据中生成一个xml类型的值,可以使用函数xmlparse。

用法:

XMLPARSE ( { DOCUMENT | CONTENT } value)

示例:

-- DOCUMENT 字符生成xml格式,字符需要是xml标准格式
test=# select xmlparse(document xmlvarchar) from xmldata ;
    xmlparse    
----------------
 <kes>aaa</kes>
 <kes>bbb</kes>
 <kes>ccc</kes>
(3 行记录)

-- CONTENT 将字符生成xml格式的xml值
test=# select xmlparse(content comm) ,sys_typeof(xmlparse(content comm)) from xmldata ; 
 xmlparse | sys_typeof 
----------+------------
 zhangsan | xml
 lisi     | xml
 wangwu   | xml
(3 行记录)

XMLSERIALIZE

功能:

作为xmlparse逆操作,从xml产生一个字符串。

用法:

XMLSERIALIZE ( { DOCUMENT | CONTENT } value AS type )

type可以是 character、character varying或 text

示例:

test=# select xmlserialize(document xmldata as text),xmlserialize(document xmldata as varchar) from xmldata ;
                 xmlserialize                  |                 xmlserialize                  
-----------------------------------------------+-----------------------------------------------
 <kes><sql>sql001</sql><rac>rac001</rac></kes> | <kes><sql>sql001</sql><rac>rac001</rac></kes>
 <kes><sql>sql002</sql><rac>rac002</rac></kes> | <kes><sql>sql002</sql><rac>rac002</rac></kes>
 <kes><sql>sql003</sql><rac>rac003</rac></kes> | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)

IS-DOCUMENT

功能:

如果参数 XML 值是一个正确的 XML 文档,则IS DOCUMENT返回真,如果不是则返回假

用法:

xml IS DOCUMENT

示例:

test=#  select (comm is document), comm ,(xmldata is document),xmldata from xmldata ;         
 ?column? |   comm   | ?column? |                    xmldata                    
----------+----------+----------+-----------------------------------------------
 f        | zhangsan | t        | <kes><sql>sql001</sql><rac>rac001</rac></kes>
 f        | lisi     | t        | <kes><sql>sql002</sql><rac>rac002</rac></kes>
 f        | wangwu   | t        | <kes><sql>sql003</sql><rac>rac003</rac></kes>
(3 行记录)

XML_IS_WELL_FORMED

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。

用法:

xml_is_well_formed(text)

示例:

test=# SELECT xml_is_well_formed('<abc>') , xml_is_well_formed('<abc/>');
 xml_is_well_formed | xml_is_well_formed 
--------------------+--------------------
 f                  | t
(1 行记录)

XML_IS_WELL_FORMED_CONTENT

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。

用法:

xml_is_well_formed_content(text)

示例:

test=# SELECT xml_is_well_formed_content('<abc>') , xml_is_well_formed_content('<abc/>');  
 xml_is_well_formed_content | xml_is_well_formed_content 
----------------------------+----------------------------
 f                          | t
(1 行记录)

XML_IS_WELL_FORMED_DOCUMENT

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。

用法:

xml_is_well_formed_document(text)

示例:

test=# SELECT xml_is_well_formed_document('<abc>') , xml_is_well_formed_document('<abc/>');
 xml_is_well_formed_document | xml_is_well_formed_document 
-----------------------------+-----------------------------
 f                           | t
(1 行记录)