暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

金仓数据库KingbaseES 原生XML系列四--XML通用函数

数据猿 2023-05-10
405

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

XMLAGG

功能:

函数xmlagg是一个聚集函数。它将聚集函数调用的输入值串接起来

用法:

xmlagg(xml)

示例:

test=# select xmlagg(xmlvarchar) from xmldata ; xmlagg -------------------------------------------- <kes>aaa</kes><kes>bbb</kes><kes>ccc</kes> (1 行记录)

XMLCOMMENT

功能:

XMLComment使用 的评估结果生成 XML 注释value_expr。

用法:

XMLCOMMENT(values_expr)

示例:

test=# select xmlcomment('doc') from dual ; xmlcomment ------------ <!--doc--> (1 行记录)

XMLCONCAT

功能:

XMLConcat将一系列XMLType实例作为输入,连接每一行的一系列元素,并返回连接后的系列。

用法:

XMLCONCAT(XMLType_instance [,...])

示例:

test=# select xmlconcat(xmlvarchar , xmldata) from xmldata ; xmlconcat ------------------------------------------------------------- <kes>aaa</kes><kes><sql>sql001</sql><rac>rac001</rac></kes> <kes>bbb</kes><kes><sql>sql002</sql><rac>rac002</rac></kes> <kes>ccc</kes><kes><sql>sql003</sql><rac>rac003</rac></kes> (3 行记录)

XMLELEMENT

功能:

XMLElement获取元素名称identifier或评估元素名称EVALNAME value_expr、元素的可选属性集合以及构成元素内容的参数。它返回一个类型的实例XMLType。

用法:

XMLELEMENT([{ENTITYESCAPING|NOENTITYESCAPING}] {[NAME] identifier|EVALNAME value_expr} [, XML_attributes_clause] [,value_expr [[AS] c_alias]][,...]) XML_attributes_clause: XML_ATTRIBUTES( [{ENTITYESCAPING|NOENTITYESCAPING}] [{SCHEMACHECK|NOSCHEMACHECK}] value [{[AS] c_alias| AS EVALINAME value_expr}] )

示例:

test=# select xmlelement(name comm, id) from xmldata ; xmlelement ---------------- <comm>1</comm> <comm>2</comm> <comm>3</comm> (3 行记录) test=# select xmlelement(name item , xmlattributes(comm as test)) from xmldata ; xmlelement ------------------------- <item test="zhangsan"/> <item test="lisi"/> <item test="wangwu"/> (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 行记录)

XMLFOREST

功能:

XMLForest将其每个参数参数转换为 XML,然后返回一个 XML 片段,该片段是这些转换后的参数的串联。

用法:

XMLFOREST(value_expr [as {c_alias|EVALINAME value_expr]}][,...])

示例:

test=# select XMLFOREST( id , comm) from xmldata ; xmlforest --------------------------------- <id>1</id><comm>zhangsan</comm> <id>2</id><comm>lisi</comm> <id>3</id><comm>wangwu</comm> (3 行记录)

XMLPI

功能:

XMLPIidentifier使用和可选的评估结果生成 XML 处理指令value_expr。

用法:

XMLPI({[NAME]idenfitier|EVALNAME value_expr} [, value_expr])

示例:

test=# select xmlpi(name id , comm) from xmldata ; xmlpi ----------------- <?id zhangsan?> <?id lisi?> <?id wangwu?> (3 行记录)

XMLROOT

功能:

XMLROOT允许您通过在现有 XML 值的 XML 根信息 (prolog) 中提供版本和独立属性来创建新的 XML 值。

用法:

XMLROOT(value_expr,VERSION {value_expr| NO VALUE} [,STANDALONE {YES|NO|NO VALUE}])

示例:

test=# SELECT XMLROOT (xmlvarchar, VERSION '1.0', STANDALONE YES) AS "XMLROOT" FROM xmldata; XMLROOT ------------------------------------------------------ <?xml version="1.0" standalone="yes"?><kes>aaa</kes> <?xml version="1.0" standalone="yes"?><kes>bbb</kes> <?xml version="1.0" standalone="yes"?><kes>ccc</kes> (3 行记录)

XMLSEQUENCE

功能:

XMLSEQUENCE函数接受一个xml类型的XML实例,返回一个包含所有顶层XML节点的可变数组。
只能在oracle模式下

用法:

XMLSEQUENCE(xml_instance xml)

示例:

test=# select t.* from xmldata ,table(xmlsequence(extract(xmldata,'/kes/*'))) t ; xml_data ------------------- <sql>sql001</sql> <rac>rac001</rac> <sql>sql002</sql> <rac>rac002</rac> <sql>sql003</sql> <rac>rac003</rac> (6 行记录)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论