XML类型函数
以下所有XML类型函数中,当GUC参数xmloption为content时,XML声明中encoding值可以取为ZHS16GBK;当GUC参数xmloption为document时,XML声明中encoding值不可以取为ZHS16GBK,若设置encoding = ZHS16GBK,则会发生报错。
xmlparse ( { DOCUMENT | CONTENT } value [wellformed])
描述:使用函数xmlparse,从字符数据产生XML类型的值。
参数:数据类型为text。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
gaussdb=# SELECT XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>');
xmlparse
----------------------------------------------------------
<book><title>Manual</title><chapter>...</chapter></book>
(1 row)
gaussdb=# SELECT XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>');
xmlparse
---------------------------------
abc<foo>bar</foo><bar>foo</bar>
(1 row)
gaussdb=# SELECT XMLPARSE (CONTENT 'abc<foo>bar</foo' wellformed);
xmlparse
------------------
abc<foo>bar</foo
(1 row)
|
xmlserialize( { DOCUMENT | CONTENT } value AS type )
描述:使用函数xmlserialize,从XML产生一个字符串。
参数:数据类型可以为character、character varying或text(或其中某个的变种)。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 |
gaussdb=# SELECT xmlserialize(CONTENT 'good' AS CHAR(10));
xmlserialize
--------------
good
(1 row)
gaussdb=# SELECT xmlserialize(DOCUMENT '<head>bad</head>' as text);
xmlserialize
------------------
<head>bad</head>
(1 row)
|
1 |
SET XML OPTION { DOCUMENT | CONTENT }; |
或使用类似的语法来设置:
1 |
SET xmloption TO { DOCUMENT | CONTENT }; |
xmlcomment(text)
描述:创建一个XML值,并且它包含一个用指定文本作为内容的XML注释。该文本不包含“--”字符且结尾不存在“-”字符,符合XML注释的格式要求。当参数为空时,结果也为空。
参数:数据类型为text。
返回值类型:XML
示例:
1 2 3 4 |
gaussdb=# SELECT xmlcomment('hello');
xmlcomment
--------------
<!--hello-->
|
xmlconcat(xml[, ...])
描述:将由单个XML值组成的列表串接成一个单独的值,该值包含一个XML的内容片段。其中空值会被忽略,并且只有当所有参数都为空时结果才为空。在兼容ORA数据库模式下,设置a_format_version值为10c和a_format_dev_version值为s2,增加了校验输入片段是否为非良构XML文本。
参数:数据类型为XML。
返回值类型:XML
示例1:
gaussdb=# SET xmloption=content;
SET
gaussdb=# SELECT XMLCONCAT(('<?xml version="1.0" encoding="GB2312" standalone="no"?><bar>foo</bar>'),('<?xml version="1.0" encoding="GB2312" standalone="no" ?><bar>foo</bar>')) ;
xmlconcat
-------------------------------------------------------------------
<?xml version="1.0" standalone="no"?><bar>foo</bar><bar>foo</bar>
(1 row)
gaussdb=# SELECT XMLCONCAT('abc>');
xmlconcat
-----------
abc>
(1 row)
示例2:兼容ORA数据库的语法示例。
gaussdb=# CREATE DATABASE gaussdb_ora DBCOMPATIBILITY='ORA';
CREATE DATABASE
gaussdb=# \c gaussdb_ora
gaussdb_ora=# SET a_format_version='10c';
SET
gaussdb_ora=# SET a_format_dev_version=s2;
SET
gaussdb_ora=# SET xmloption=content;
SET
gaussdb_ora=# SELECT XMLCONCAT(('<?xml version="1.0" encoding="GB2312" standalone="no"?><bar>foo</bar>'),('<?xml version="1.0" encoding="GB2312" standalone="no" ?><bar>foo</bar>')) ;
xmlconcat
-------------------------------------------------------------------
<?xml version="1.0" standalone="no"?><bar>foo</bar><bar>foo</bar>
(1 row)
gaussdb_ora=# SELECT XMLCONCAT('abc>');
ERROR: invalid XML document
DETAIL: line 1: Start tag expected, '<' not found
abc>
^
CONTEXT: referenced column: xmlconcat
gaussdb_ora=# \c postgres
gaussdb=# DROP DATABASE gaussdb_ora;
DROP DATABASE
在兼容ORA数据库模式下,设置a_format_version值为10c和a_format_dev_version值为s2时,若XML声明中encoding属性值为ZHS16GBK,则XMLCONCAT函数将会发生报错。
xmlagg(xml [order_by_clause])
描述:该函数是一个聚集函数,它将聚集函数调用的输入值串接起来,且支持跨行串接,order_by_clause详见SELECT。在兼容ORA数据库模式下,设置a_format_version值为10c和a_format_dev_version值为s2,数据库xmloption参数默认为content,当xmloption设置为document时,使用换行符串接多行XML。若XML声明中encoding属性值不为默认编码UTF-8时,聚集结果有XML声明。
参数:XML
返回值类型:XML
示例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
gaussdb=# CREATE TABLE xmltest (
id int,
data xml
);
NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
gaussdb=# INSERT INTO xmltest VALUES (1, '<value>one</value>');
INSERT 0 1
gaussdb=# INSERT INTO xmltest VALUES (2, '<value>two</value>');
INSERT 0 1
gaussdb=# SELECT xmlagg(data) FROM xmltest;
xmlagg
--------------------------------------
<value>one</value><value>two</value>
(1 row)
|
示例2:为兼容ORA数据库的语法示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
gaussdb=# SET xmloption=document;
SET
gaussdb=# SELECT xmlagg(data) FROM xmltest;
xmlagg
--------------------
<value>one</value>+
<value>two</value>
(1 row)
gaussdb=# DELETE FROM XMLTEST;
DELETE 2
gaussdb=# INSERT INTO xmltest VALUES (1, '<?xml version="1.0" encoding="GBK"?><value>one</value>');
INSERT 0 1
gaussdb=# INSERT INTO xmltest VALUES (2, '<?xml version="1.0" encoding="GBK"?><value>two</value>');
INSERT 0 1
gaussdb=# SELECT xmlagg(data) FROM xmltest;
xmlagg
--------------------------------------------------------
<?xml version="1.0" encoding="GBK"?><value>one</value>+
<value>two</value>
(1 row)
gaussdb=# SELECT xmlagg(data order by id desc) FROM xmltest;
xmlagg
--------------------------------------------------------
<?xml version="1.0" encoding="GBK"?><value>two</value>+
<value>one</value>
(1 row)
gaussdb=# DROP TABLE xmltest;
|
xmlelement( [ ENTITYESCAPING | NOENTITYESCAPING ] { [ NAME ] element_name | EVALNAME element_name } [ , xmlattributes( [ ENTITYESCAPING | NOENTITYESCAPING ] value [ [ AS ] attname | AS EVALNAME attname ] [ , ... ] ) ] [ , content [ [ AS ] alias ] [ , ... ] ] )
描述:使用给定的名称、属性和内容产生一个XML元素。
返回值类型:XML
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
gaussdb=# SELECT xmlelement(name foo);
xmlelement
------------
<foo/>
--在ORA兼容模式下。
gaussdb=# CREATE DATABASE gaussdb_ora DBCOMPATIBILITY='ORA';
CREATE DATABASE
gaussdb=# \c gaussdb_ora
gaussdb_ora=# SET a_format_version='10c';
SET
gaussdb_ora=# SET a_format_dev_version=s2;
SET
--xmlelement中默认不设置或者设置ENTITYESCAPING关键字时,xmlelement的内容中的保留字符将会被转义。
gaussdb_ora=# SELECT xmlelement("entityescaping<>", 'a$><&"b');
xmlelement
-------------------------------------------------------------
<entityescaping<>>a$><&"b</entityescaping<>>
(1 row)
gaussdb_ora=# SELECT xmlelement(entityescaping "entityescaping<>", 'a$><&"b');
xmlelement
-------------------------------------------------------------
<entityescaping<>>a$><&"b</entityescaping<>>
(1 row)
--xmlelement中设置NOENTITYESCAPING关键字时,xmlelement的内容中的保留字符将不会被转义。
gaussdb_ora=# SELECT xmlelement(noentityescaping "entityescaping<>", 'a$><&"b');
xmlelement
----------------------------------------------
<entityescaping<>>a$><&"b</entityescaping<>>
(1 row)
--xmlelement中对内容使用[as] alias声明别名时,内容值类型必须为xml类型。
gaussdb_ora=# SELECT xmlelement("entityescaping<>", '<abc/>' b);
ERROR: argument of XMLELEMENT must be type xml, not type unknown
LINE 1: SELECT xmlelement("entityescaping<>", '<abc/>' b);
^
CONTEXT: referenced column: xmlelement
gaussdb_ora=# SELECT xmlelement("entityescaping<>", '<abc/>' as b);
ERROR: argument of XMLELEMENT must be type xml, not type unknown
LINE 1: SELECT xmlelement("entityescaping<>", '<abc/>' as b);
^
CONTEXT: referenced column: xmlelement
gaussdb_ora=# SELECT xmlelement("entityescaping<>", xml('<abc/>') b);
xmlelement
---------------------------------------------
<entityescaping<>><abc/></entityescaping<>>
(1 row)
gaussdb_ora=# SELECT xmlelement("entityescaping<>", xml('<abc/>') as b);
xmlelement
---------------------------------------------
<entityescaping<>><abc/></entityescaping<>>
(1 row)
--xmlattributes中默认不设置或者设置ENTITYESCAPING关键字时,xmlattributes的内容中的保留字符将会被转义。
gaussdb_ora=# SELECT xmlelement("entityescaping<>", xmlattributes('entityescaping<>' "entityescaping<>"));
xmlelement
---------------------------------------------------------------
<entityescaping<> entityescaping<>="entityescaping<>"/>
(1 row)
gaussdb_ora=# SELECT xmlelement(name "entityescaping<>", xmlattributes(entityescaping 'entityescaping<>' "entityescaping<>"));
xmlelement
---------------------------------------------------------------
<entityescaping<> entityescaping<>="entityescaping<>"/>
(1 row)
--xmlattributes中设置NOENTITYESCAPING关键字时,xmlattributes的内容中的保留字符将不会被转义。
gaussdb_ora=# SELECT xmlelement("entityescaping<>", xmlattributes(noentityescaping 'entityescaping<>' "entityescaping<>"));
xmlelement
---------------------------------------------------------
<entityescaping<> entityescaping<>="entityescaping<>"/>
(1 row)
gaussdb_ora=# \c postgres
gaussdb=# DROP DATABASE gaussdb_ora;
DROP DATABASE
|
- xmlelement和xmlattributes的name字段赋NULL时,行为与O不一致。xmlelement的name字段赋NULL时,结果显示name信息为空,且不显示属性信息。xmlattributes的name字段赋NULL时,不显示属性信息。
- 设置如下两个参数后,xmlelement的内容转义规则为ORA兼容,未设置时xmlelement的内容转义规则为PG兼容。
1 2
SET a_format_version='10c'; SET a_format_dev_version=s2;
xmlforest(content [AS name] [, ...])
描述:使用给定名称和内容产生一个元素的XML序列。
返回值类型:XML
1 2 3 4 |
gaussdb=# SELECT xmlforest('abc' AS foo, 123 AS bar);
xmlforest
------------------------------
<foo>abc</foo><bar>123</bar>
|
xmlpi(name target [, content])
描述:创建一个XML处理指令。若内容不为空,则内容不能包含字符序列。
返回值类型:XML
1 2 3 4 |
gaussdb=# SELECT xmlpi(name php, 'echo "hello world";');
xmlpi
-----------------------------
<?php echo "hello world";?>
|
xmlroot(xml, version text | no value [, standalone yes|no|no value])
描述:修改一个XML值的根节点的属性。如果指定了一个版本,它会替换根节点的版本声明中的值;如果指定了一个独立设置,它会替换根节点的独立声明中的值。
1 2 3 4 5 |
gaussdb=# SELECT xmlroot('<?xml version="1.1"?><content>abc</content>',version '1.0', standalone yes);
xmlroot
--------------------------------------------------------------
<?xml version="1.0" standalone="yes"?><content>abc</content>
(1 row)
|
xmlexists(text passing [BY REF] xml [BY REF])
描述:评价一个XPath 1.0表达式(第一个参数),以传递的XML值作为其上下文项。 如果评价的结果产生一个空节点集,该函数返回false,如果产生任何其他值,则返回true。 如果任何参数为空,则函数返回null。 作为上下文项传递的非空值必须是一个XML文档,而不是内容片段或任何非XML值。
参数:XML
返回值类型:BOOLEAN
1 2 3 4 5 |
gaussdb=# SELECT xmlexists('//town[text() = ''Toronto'']' PASSING BY REF '<towns><town>Toronto</town><town>Ottawa</town></towns>');
xmlexists
------------
t
(1 row)
|
xml_is_well_formed(text)
描述:检查text是不是正确的XML类型格式、返回值为布尔类型。
参数:text
返回值类型:BOOLEAN
1 2 3 4 5 |
gaussdb=# SELECT xml_is_well_formed('<>');
xml_is_well_formed
--------------------
f
(1 row)
|
xml_is_well_formed_document(text)
描述:检查text是否为良构的XML document类型格式,返回值为布尔类型。
参数:text
返回值类型:BOOLEAN
1 2 3 4 5 |
gaussdb=# SELECT xml_is_well_formed_document('<pg:foo xmlns:pg="http://postgresql.org/stuff">bar</pg:foo>');
xml_is_well_formed_document
-----------------------------
t
(1 row)
|
xml_is_well_formed_content(text)
描述:检查text是否为良构的XML content类型格式,返回值为布尔类型。
参数:text
返回值类型:BOOLEAN
1 2 3 4 5 |
gaussdb=# SELECT xml_is_well_formed_content('k');
xml_is_well_formed_content
----------------------------
t
(1 row)
|
xpath(xpath, xml [, nsarray])
描述:在XML类型的数据xml上,计算XPath 1.0表达式(如:xpath (a text value))。它返回一个XML值的数组,该数组对应于该XPath表达式产生的节点集合。如果该XPath表达式返回一个标量值而不是一个节点集合,将会返回一个单一元素的数组。
第二个参数必须是一个良构的XML文档。它必须有一个单一根节点元素。
该函数可选的第三个参数是一个名字空间映射的数组。这个数组应该是一个二维text数组,其第二轴长度等于2(即应该是一个数组的数组,其中每一个都刚好由2个元素组成)。每个数组项的第一个元素是名字空间的名称(别名),第二个元素是名字空间的URI。并不要求在这个数组中提供的别名和在XML文档本身中使用的那些名字空间相同(即在XML文档中和在xpath函数环境中,别名都是本地的)。
返回值类型:XML
1 2 3 4 5 |
gaussdb=# SELECT xpath('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>',ARRAY[ARRAY['my', 'http://example.com']]);
xpath
--------
{test}
(1 row)
|
xpath_exists(xpath, xml [, nsarray])
描述:该函数是xpath函数的一种特殊形式。这个函数不是返回满足XPath 1.0表达式的单一XML值,它返回一个布尔值表示查询是否被满足(它是否产生了空节点集以外的任何值)。这个函数等价于标准的XMLEXISTS谓词,不过它还提供了对一个名字空间映射参数的支持。
返回值类型:BOOLEAN
1 2 3 4 5 |
gaussdb=# SELECT xpath_exists('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>',ARRAY[ARRAY['my', 'http://example.com']]);
xpath_exists
--------------
t
(1 row)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
gaussdb=# CREATE SCHEMA testxmlschema;
CREATE SCHEMA
gaussdb=# CREATE TABLE testxmlschema.test1 (a int, b text);
CREATE TABLE
gaussdb=# INSERT INTO testxmlschema.test1 VALUES (1, 'one'), (2, 'two'), (-1, null);
INSERT 0 3
gaussdb=# CREATE DATABASE test;
CREATE DATABASE
--示例执行结束后,可使用如下命令删除上述前置数据。
gaussdb=# DROP DATABASE test;
DROP DATABASE
gaussdb=# DROP TABLE testxmlschema.test1;
DROP TABLE
gaussdb=# DROP SCHEMA testxmlschema;
DROP SCHEMA
|
query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将query查询的内容映射成XML模式文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
gaussdb=# SELECT query_to_xml('SELECT * FROM testxmlschema.test1', false, false, '');
query_to_xml
---------------------------------------------------------------
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<row> +
<a>1</a> +
<b>one</b> +
</row> +
+
<row> +
<a>2</a> +
<b>two</b> +
</row> +
+
<row> +
<a>-1</a> +
</row> +
+
</table> +
(1 row)
|
query_to_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将query查询的内容映射成XML文档和XML模式文档,并把两个文档连接在一起。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
gaussdb=# SELECT query_to_xmlschema('SELECT * FROM testxmlschema.test1', false, false, '');
query_to_xmlschema
----------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.regression.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="RowType"> +
<xsd:sequence> +
<xsd:element name="a" type="INTEGER" minOccurs="0"></xsd:element> +
<xsd:element name="b" type="UDT.regression.pg_catalog.text" minOccurs="0"></xsd:element>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:complexType name="TableType"> +
<xsd:sequence> +
<xsd:element name="row" type="RowType" minOccurs="0" maxOccurs="unbounded"/> +
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="table" type="TableType"/> +
+
</xsd:schema>
(1 row)
|
query_to_xml_and_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将query查询的内容映射成XML文档和XML模式文档,并把两个文档连接在一起。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
gaussdb=# SELECT query_to_xml_and_xmlschema('SELECT * FROM testxmlschema.test1', true, true, '');
query_to_xml_and_xmlschema
------------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.regression.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="RowType"> +
<xsd:sequence> +
<xsd:element name="a" type="INTEGER" nillable="true"></xsd:element> +
<xsd:element name="b" type="UDT.regression.pg_catalog.text" nillable="true"></xsd:element>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="row" type="RowType"/> +
+
</xsd:schema> +
+
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +
+
<a>1</a> +
<b>one</b> +
</row> +
+
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +
+
<a>2</a> +
<b>two</b> +
</row> +
+
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +
+
<a>-1</a> +
<b xsi:nil="true"/> +
</row> +
+
(1 row)
|
cursor_to_xml(cursor refcursor, count int, nulls boolean,tableforest boolean, targetns text)
描述:该函数会将游标查询的内容映射成XML文档。
返回值类型:XML
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
gaussdb=# CURSOR xc WITH HOLD FOR SELECT * FROM testxmlschema.test1 ORDER BY 1, 2;
DECLARE CURSOR
gaussdb=# SELECT cursor_to_xml('xc'::refcursor, 5, false, true, '');
cursor_to_xml
-------------------------------------------------------------
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<a>-1</a> +
</row> +
+
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<a>1</a> +
<b>one</b> +
</row> +
+
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<a>2</a> +
<b>two</b> +
</row> +
+
(1 row)
|
cursor_to_xmlschema(cursor refcursor, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将游标查询的内容映射成XML模式文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
gaussdb=# SELECT cursor_to_xmlschema('xc'::refcursor, true, false, '');
cursor_to_xmlschema
------------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.regression.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="RowType"> +
<xsd:sequence> +
<xsd:element name="a" type="INTEGER" nillable="true"></xsd:element> +
<xsd:element name="b" type="UDT.regression.pg_catalog.text" nillable="true"></xsd:element>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:complexType name="TableType"> +
<xsd:sequence> +
<xsd:element name="row" type="RowType" minOccurs="0" maxOccurs="unbounded"/> +
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="table" type="TableType"/> +
+
</xsd:schema>
(1 row)
|
schema_to_xml(schema name, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个模式的内容映射成XML文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
gaussdb=# SELECT schema_to_xml('testxmlschema', false, true, '');
schema_to_xml
-----------------------------------------------------------------------
<testxmlschema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<test1> +
+
<a>1</a> +
<b>one</b> +
</test1> +
+
<test1> +
+
<a>2</a> +
<b>two</b> +
</test1> +
+
<test1> +
+
<a>-1</a> +
</test1> +
+
+
</testxmlschema> +
(1 row)
|
schema_to_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个模式的内容映射成XML模式文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
gaussdb=# SELECT schema_to_xmlschema('testxmlschema', false, true, '');
schema_to_xmlschema
-----------------------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.t1.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="SchemaType.t1.testxmlschema"> +
<xsd:sequence> +
<xsd:element name="test1" type="RowType.t1.testxmlschema.test1" minOccurs="0" maxOccurs="unbounded"/>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="testxmlschema" type="SchemaType.t1.testxmlschema"/> +
+
</xsd:schema>
(1 row)
|
schema_to_xml_and_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个模式的内容映射成XML文档和XML模式文档,并把两个文档连接在一起。
返回值类型:XML
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
gaussdb=# SELECT schema_to_xml_and_xmlschema('testxmlschema', true, true, 'foo');
schema_to_xml_and_xmlschema
--------------------------------------------------------------------------------------------------------------
<testxmlschema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="foo" xsi:schemaLocation="foo #">+
+
+
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema" +
targetNamespace="foo" +
elementFormDefault="qualified"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.t1.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="SchemaType.t1.testxmlschema"> +
<xsd:sequence> +
<xsd:element name="test1" type="RowType.t1.testxmlschema.test1" minOccurs="0" maxOccurs="unbounded"/> +
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="testxmlschema" type="SchemaType.t1.testxmlschema"/> +
+
</xsd:schema> +
+
<test1> +
+
<a>1</a> +
<b>one</b> +
</test1> +
+
<test1> +
+
<a>2</a> +
<b>two</b> +
</test1> +
+
<test1> +
+
<a>-1</a> +
<b xsi:nil="true"/> +
</test1> +
+
+
</testxmlschema> +
(1 row)
|
database_to_xml(nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个数据库的内容映射成XML文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
gaussdb=# SELECT database_to_xml(true, true, 'test');
database_to_xml
---------------------------------------------------------------------------
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="test">+
+
<dbe_x005F_xml> +
+
</dbe_x005F_xml> +
+
<dbe_x005F_xmldom> +
+
</dbe_x005F_xmldom> +
+
<dbe_x005F_xmlparser> +
+
</dbe_x005F_xmlparser> +
+
<public> +
+
</public> +
+
</test> +
(1 row)
|
database_to_xmlschema(nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个数据库的内容映射成XML模式文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
gaussdb=# SELECT database_to_xmlschema(true, true, 'test');
database_to_xmlschema
------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema" +
targetNamespace="test" +
elementFormDefault="qualified"> +
+
<xsd:complexType name="CatalogType.test"> +
<xsd:all> +
<xsd:element name="dbe_x005F_xml" type="SchemaType.test.dbe_x005F_xml"/> +
<xsd:element name="dbe_x005F_xmldom" type="SchemaType.test.dbe_x005F_xmldom"/> +
<xsd:element name="dbe_x005F_xmlparser" type="SchemaType.test.dbe_x005F_xmlparser"/>+
<xsd:element name="public" type="SchemaType.test.public"/> +
</xsd:all> +
</xsd:complexType> +
+
<xsd:element name="test" type="CatalogType.test"/> +
+
</xsd:schema>
(1 row)
|
database_to_xml_and_xmlschema(nulls boolean, tableforest boolean, targetns text)
描述:该函数会将整个模式的内容映射成XML文档和XML模式文档,并把两个文档连接在一起。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
gaussdb=# SELECT database_to_xml_and_xmlschema(true, true, 'test');
database_to_xml_and_xmlschema
-------------------------------------------------------------------------------------------------------
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="test" xsi:schemaLocation="test #">+
+
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema" +
targetNamespace="test" +
elementFormDefault="qualified"> +
+
<xsd:complexType name="CatalogType.test"> +
<xsd:all> +
<xsd:element name="dbe_x005F_xml" type="SchemaType.test.dbe_x005F_xml"/> +
<xsd:element name="dbe_x005F_xmldom" type="SchemaType.test.dbe_x005F_xmldom"/> +
<xsd:element name="dbe_x005F_xmlparser" type="SchemaType.test.dbe_x005F_xmlparser"/> +
<xsd:element name="public" type="SchemaType.test.public"/> +
</xsd:all> +
</xsd:complexType> +
+
<xsd:element name="test" type="CatalogType.test"/> +
+
</xsd:schema> +
+
<dbe_x005F_xml> +
+
</dbe_x005F_xml> +
+
<dbe_x005F_xmldom> +
+
</dbe_x005F_xmldom> +
+
<dbe_x005F_xmlparser> +
+
</dbe_x005F_xmlparser> +
+
<public> +
+
</public> +
+
</test> +
(1 row)
|
table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将关系表的内容映射成XML文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
gaussdb=# SELECT table_to_xml('testxmlschema.test1', false, false, '');
table_to_xml
---------------------------------------------------------------
<test1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+
+
<row> +
<a>1</a> +
<b>one</b> +
</row> +
+
<row> +
<a>2</a> +
<b>two</b> +
</row> +
+
<row> +
<a>-1</a> +
</row> +
+
</test1> +
(1 row)
|
table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将关系表的内容映射成XML模式文档。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
gaussdb=# SELECT table_to_xmlschema('testxmlschema.test1', false, false, '');
table_to_xmlschema
-----------------------------------------------------------------------------------------------------------------
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.regression.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="RowType.regression.testxmlschema.test1"> +
<xsd:sequence> +
<xsd:element name="a" type="INTEGER" minOccurs="0"></xsd:element> +
<xsd:element name="b" type="UDT.regression.pg_catalog.text" minOccurs="0"></xsd:element> +
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:complexType name="TableType.regression.testxmlschema.test1"> +
<xsd:sequence> +
<xsd:element name="row" type="RowType.regression.testxmlschema.test1" minOccurs="0" maxOccurs="unbounded"/>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="test1" type="TableType.regression.testxmlschema.test1"/> +
+
</xsd:schema>
(1 row)
|
table_to_xml_and_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
描述:该函数会将关系表的内容映射成XML文档和XML模式文档,并把两个文档连接在一起。
返回值类型:XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
gaussdb=# SELECT table_to_xml_and_xmlschema('testxmlschema.test1', false, false, '');
table_to_xml_and_xmlschema
-----------------------------------------------------------------------------------------------------------------
<test1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="#"> +
+
<xsd:schema +
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +
+
<xsd:simpleType name="INTEGER"> +
<xsd:restriction base="xsd:int"> +
<xsd:maxInclusive value="2147483647"/> +
<xsd:minInclusive value="-2147483648"/> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:simpleType name="UDT.regression.pg_catalog.text"> +
<xsd:restriction base="xsd:string"> +
</xsd:restriction> +
</xsd:simpleType> +
+
<xsd:complexType name="RowType.regression.testxmlschema.test1"> +
<xsd:sequence> +
<xsd:element name="a" type="INTEGER" minOccurs="0"></xsd:element> +
<xsd:element name="b" type="UDT.regression.pg_catalog.text" minOccurs="0"></xsd:element> +
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:complexType name="TableType.regression.testxmlschema.test1"> +
<xsd:sequence> +
<xsd:element name="row" type="RowType.regression.testxmlschema.test1" minOccurs="0" maxOccurs="unbounded"/>+
</xsd:sequence> +
</xsd:complexType> +
+
<xsd:element name="test1" type="TableType.regression.testxmlschema.test1"/> +
+
</xsd:schema> +
+
<row> +
<a>1</a> +
<b>one</b> +
</row> +
+
<row> +
<a>2</a> +
<b>two</b> +
</row> +
+
<row> +
<a>-1</a> +
</row> +
+
</test1> +
(1 row)
|
- xpath相关函数仅支持xpath()和xpath_exists(),由于其使用xpath语言查询XML文档,而这些函数都依赖于libxml2库,且这个库仅在Xpath1.0提供,所以对XPath的限制为1.0。
- 不支持xquery、xml extension、xslt功能。
getclobval(xml)
描述:将XML类型转化成CLOB类型。该函数在参数a_format_version值为10c和a_format_dev_version值为s4的情况下有效。
参数:入参为XML类型。
返回值类型:CLOB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
gaussdb=# CREATE DATABASE gaussdb_ora DBCOMPATIBILITY='ORA';
CREATE DATABASE
gaussdb=# \c gaussdb_ora
gaussdb_ora=# SET a_format_version='10c';
SET
gaussdb_ora=# SET a_format_dev_version='s4';
SET
gaussdb_ora=# declare
xmldata xml;
result clob;
begin
xmldata := '<a>123</a>';
result := getclobval(xmldata);
RAISE NOTICE 'result is : %',result;
END;
/
NOTICE: result is : <a>123</a>
gaussdb_ora=# SELECT getclobval(xmlparse(document '<a>123</a>'));
getclobval
------------
<a>123</a>
(1 row)
gaussdb_ora=# \c postgres
gaussdb=# DROP DATABASE gaussdb_ora;
DROP DATABASE
|
getstringval(xml)
描述:该函数将XML类型转化为字符串。此函数在参数a_format_version值为10c和a_format_dev_version值为s4的情况下有效。
参数:入参为XML类型。
返回值类型:VARCHAR2
示例:
gaussdb=# CREATE DATABASE gaussdb_ora DBCOMPATIBILITY='ORA';
CREATE DATABASE
gaussdb=# \c gaussdb_ora
gaussdb_ora=# SET a_format_version='10c';
SET
gaussdb_ora=# SET a_format_dev_version='s4';
SET
gaussdb_ora=# declare
xmldata xml;
result varchar2;
begin
xmldata := '<a>123<b>456</b></a>';
result := getstringval(xmldata);
RAISE NOTICE 'result is : %',result;
END;
/
NOTICE: result is : <a>123<b>456</b></a>
gaussdb_ora=# select getstringval(xmlparse(document '<a>123<b>456</b></a>'));
getstringval
----------------------
<a>123<b>456</b></a>
(1 row)
gaussdb_ora=# \c postgres
gaussdb=# DROP DATABASE gaussdb_ora;
DROP DATABASE
xmlsequence(xml)
描述:此函数的功能是将一个XML类型的参数转换为一个XMLTYPE类型的数组,每个数组元素都是XMLTYPE对象。这个函数的输入参数不能为空,也必须是一个有效的XML文档。如果输入参数不符合要求,函数会返回空值或者抛出异常。这个函数可以用于处理XML文档中的多个子节点,或者将XML文档分割为多个片段。
参数:XML类型。
返回值类型:xmltype类型的数组。
gaussdb=# SELECT xmlsequence(xml('<books><book><title>The Catcher in the Rye</title><author>J.D. Salinger</author><year>1951</year></book><book><title>1984</title><author>George Orwell</author><year>1949</year></book><book><title>The Hitchhiker''s Guide to the Galaxy</title><author>Douglas Adams</author><year>1979</year></book></books>'));
xmlsequence
-----------------------------------------------------------
{"<books> +
<book> +
<title>The Catcher in the Rye</title> +
<author>J.D. Salinger</author> +
<year>1951</year> +
</book> +
<book> +
<title>1984</title> +
<author>George Orwell</author> +
<year>1949</year> +
</book> +
<book> +
<title>The Hitchhiker's Guide to the Galaxy</title>+
<author>Douglas Adams</author> +
<year>1979</year> +
</book> +
</books>"}
(1 row)
当XML文档中含有双引号时,单独查看xmlsequence函数,结果中会包含双引号的转义符,使用xmlsequence函数结果时不受影响。