VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

XML类型函数

产生 XML 内容

下列函数可以用来从 SQL 数据产生 XML 内容。它们特别适合于将查询结果格式化成 XML 文档以便于在客户端应用中处理。

  • xmlparse ( { DOCUMENT | CONTENT } value)

    描述:使用函数xmlparse, 来从字符数据产生xml类型的值。

    参数:数据类型为text

    返回值类型:xml

    示例:

    SELECT XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>');
    SELECT XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>');
    

    返回结果依次为:

                          xmlparse                         
    ----------------------------------------------------------
    <book><title>Manual</title><chapter>...</chapter></book>
    (1 row)
    
            xmlparse             
    ---------------------------------
    abc<foo>bar</foo><bar>foo</bar>
    (1 row)
    
  • xmlserialize( { DOCUMENT | CONTENT } value AS type )

    描述:使用函数xmlserialize, 来从xml产生一个字符串。

    参数:类型可以是character,character varying或text或其中某个的变种。

    返回值类型:xml

    示例:

    SELECT XMLSERIALIZE(CONTENT 'good' AS CHAR(10));
    SELECT xmlserialize(DOCUMENT '<head>bad</head>' as text);
    

    返回结果依次为:

     xmlserialize 
    --------------
    good
    (1 row)
    
    xmlserialize   
    ------------------
    <head>bad</head>
    (1 row)
    

    当一个字符串值在没有通过XMLPARSE或XMLSERIALIZE的情况下,与xml类型进行转换时,分别的选择DOCUMENT与CONTENT由”XML option” 会话配置参数决定,这个配置参数可以由标准命令来设置:

    SET XML OPTION { DOCUMENT | CONTENT };
    

    或使用类似的语法来设置:

    SET xmloption TO { DOCUMENT | CONTENT };
    
  • xmlcomment(text)

    描述:创建一个XML值,并且它包含一个用指定文本作为内容的XML注释。该文本不包含“-”字符且不存在是“-”字符的结尾、符合XML注释的格式要求。且当参数为空时、结果也为空。

    参数:数据类型为text。

    返回值类型:xml

    示例:

    SELECT xmlcomment('hello');
    

    返回结果为:

      xmlcomment
    --------------
    <!--hello-->
    (1 row)
    
  • xmlconcat(xml[, …])

    描述:将由单个XML值组成的列表串接成一个单独的值,该值包含一个XML的内容片断。其中空值会被忽略,并且只有当所有参数都为空时结果才为空。

    参数:数据类型为xml。

    返回值类型:xml

    示例:

    SELECT xmlconcat('<abc/>', '<bar>foo</bar>');
    

    返回结果为:

          xmlconcat
    ----------------------
    <abc/><bar>foo</bar>
    (1 row)
    
  • xmlelement(name name [, xmlattributes(value [AS attname] [, … ])] [, content, …])

    描述:使用给定名称、属性和内容产生一个XML元素。

    返回值类型:xml

    示例:

    SELECT xmlelement(name foo);
    

    返回结果为:

     xmlelement
    ------------
    <foo/>
    (1 row)
    
  • xmlforest(content [AS name] [, …])

    描述:使用给定名称和内容产生一个元素的XML序列。

    返回值类型:xml

    示例:

    SELECT xmlforest('abc' AS foo, 123 AS bar);
    SELECT xmlforest(table_name, column_name) FROM information_schema.columns WHERE table_schema = 'pg_catalog';
    

    返回结果依次为:

          xmlforest
    ------------------------------
    <foo>abc</foo><bar>123</bar>
    (1 row)
    
                                                xmlforest
    -------------------------------------------------------------------------------------------
    <table_name>pg_authid</table_name><column_name>rolname</column_name>
    <table_name>pg_authid</table_name><column_name>rolsuper</column_name>
    ...
    
  • xmlpi(name target [, content])

    描述:创建一个XML处理指令。 如果content内容不为空,则content内容不能包含字符序列?>

    处理指令(Processing Instructions,PI)是用<? ?>包围的一种标签,用以描述特定应用程序信息。Xml文档可以包含多个针对不同应用程序的处理指令。处理指令由两部分组成,target和content。target的角色类似于“名称”,紧随target之后的字符串就是content,content可以包含多个标记。

    返回值类型:xml

    示例:

    SELECT xmlpi(name php, 'echo "hello world";');
    

    返回结果为:

                xmlpi
    -----------------------------
    <?php echo "hello world";?>
    (1 row)
    
  • xmlroot(xml, version text | no value [, standalone yes|no|no value])

    描述:修改一个XML值的根节点的属性。如果指定了一个版本,它会替换根节点的版本声明中的值、如果指定了一个独立设置、它会替换根节点的独立声明中的值。

    返回值类型:xml

    示例:

    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)
    
  • xmlagg(xml)

    描述:该函数是一个聚集函数、它将聚集函数调用的输入值串接起来,且支持跨行串接。

    参数:xml

    返回值类型:xml

    示例:

    1、创建测试表并插入数据。

     CREATE TABLE xmltest (id int,data xml);
     INSERT INTO xmltest VALUES (1, '<value>one</value>');
     INSERT INTO xmltest VALUES (2, '<value>two</value>');
    

    2、调用xmlagg函数。

     SELECT xmlagg(data) FROM xmltest;
    

    返回结果为:

                    xmlagg
    --------------------------------------
    <value>one</value><value>two</value>
    (1 row)
    

XML 谓词

下列函数用于检查xml值的属性。

  • xmlexists(text passing [BY REF] xml [BY REF])

    描述:评价一个XPath 1.0表达式(第一个参数),以传递的XML值作为其上下文项。 如果评价的结果产生一个空节点集,该函数返回false,如果产生任何其他值,则返回true。 如果任何参数为空,则函数返回null。 作为上下文项传递的非空值必须是一个XML文档,而不是内容片段或任何非XML值。

    参数:xml

    返回值类型:bool

    示例:

    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

    返回值类型:bool

    示例:

    SELECT xml_is_well_formed('<>');
    

    返回结果为:

     xml_is_well_formed 
    --------------------
    f
    (1 row)
    
  • xml_is_well_formed_document(text)

    描述:检查text是不是正确的XML类型格式、返回值为布尔类型。

    参数:text

    返回值类型:bool

    示例:

     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类型格式、返回值为布尔类型。

    参数:text

    返回值类型:bool

    示例:

    select xml_is_well_formed_content('k');
    

    返回结果为:

    xml_is_well_formed_content
    ----------------------------
    t
    (1 row)
    

处理 XML

Vastbase提供了下列函数用于处理数据类型xml的值。

xpath相关函数仅支持 xpath() 和 xpath_exists()、由于其使用xpath语言查询XML文档,而这些函数都依赖于libxml2 库,且这个库仅在Xpath1.0提供、所以对XPath的限制为1.0。

  • 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

    示例:

    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谓词,不过它还提供了对一个名字空间映射参数的支持。

    返回值类型:bool

    示例:

    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)
    

    将表映射到 XML

  • query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)

    描述:该函数将关系表的内容映射成 XML 值,可理解为XML的导出功能,由参数query传递的查询并且映射结果集。

    返回值类型:xml

    示例:示例中使用的xmltest表已创建,参考xmlagg示例

    select query_to_xml('select * from xmltest',true,true,'mydb');
    

    返回结果为:

                                query_to_xml
    ----------------------------------------------------------------------
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">+
                                                                        +
    <id>1</id>                                                        +
    <data><value>one</value></data>                                   +
    </row>                                                              +
                                                                        +
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">+
                                                                        +
    <id>2</id>                                                        +
    <data><value>two</value></data>                                   +
    </row>                                                              +
                                                                        +
    
    (1 row)
    
  • query_to_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)

    描述:返回 XML 模式文档,这些文档描述上述对应函数所执行的映射。

    返回值:XML 模式文档

    示例:把查询结果中的行转换成xml格式,示例中使用的xmltest表已创建,参考xmlagg示例

    select query_to_xmlschema('select * from xmltest',true,true,'mydb');
    

    返回结果为:

                                        query_to_xmlschema
    ------------------------------------------------------------------------------------------
    <xsd:schema                                                                             +
        xmlns:xsd="http://xxxxxx/2001/XMLSchema"                                            +
        targetNamespace="mydb"                                                              +
        elementFormDefault="qualified">                                                     +
                                                                                            +
    <xsd:simpleType name="INTEGER">                                                         +
    <xsd:restriction base="xsd:int">                                                      +
        <xsd:maxInclusive value="2147483647"/>                                              +
        <xsd:minInclusive value="-2147483648"/>                                             +
    </xsd:restriction>                                                                    +
    </xsd:simpleType>                                                                       +
                                                                                            +
    <xsd:complexType mixed="true">                                                          +
    <xsd:sequence>                                                                        +
        <xsd:any name="element" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>+
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:complexType name="RowType">                                                        +
    <xsd:sequence>                                                                        +
        <xsd:element name="id" type="INTEGER" nillable="true"></xsd:element>                +
        <xsd:element name="data" type="XML" nillable="true"></xsd:element>                  +
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:element name="row" type="RowType"/>                                                +
                                                                                            +
    </xsd:schema>
    (1 row)
    
  • query_to_xml_and_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)

    描述:产生XML数据映射和对应的XML模式,并把产生的结果链接在一起放在一个文档中。

    示例:把查询结果中行的定义和值转成xml格式。示例中使用的xmltest表已创建,参考xmlagg示例

    select query_to_xml_and_xmlschema('select * from xmltest',true,true,'mydb');
    

    返回结果为:

                                    query_to_xml_and_xmlschema
    ------------------------------------------------------------------------------------------
    <xsd:schema                                                                             +
        xmlns:xsd="http://xxxxxx/2001/XMLSchema"                                            +
        targetNamespace="mydb"                                                              +
        elementFormDefault="qualified">                                                     +
                                                                                            +
    <xsd:simpleType name="INTEGER">                                                         +
    <xsd:restriction base="xsd:int">                                                      +
        <xsd:maxInclusive value="2147483647"/>                                              +
        <xsd:minInclusive value="-2147483648"/>                                             +
    </xsd:restriction>                                                                    +
    </xsd:simpleType>                                                                       +
                                                                                            +
    <xsd:complexType mixed="true">                                                          +
    <xsd:sequence>                                                                        +
        <xsd:any name="element" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>+
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:complexType name="RowType">                                                        +
    <xsd:sequence>                                                                        +
        <xsd:element name="id" type="INTEGER" nillable="true"></xsd:element>                +
        <xsd:element name="data" type="XML" nillable="true"></xsd:element>                  +
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:element name="row" type="RowType"/>                                                +
                                                                                            +
    </xsd:schema>                                                                           +
                                                                                            +
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">                    +
                                                                                            +
    <id>1</id>                                                                            +
    <data><value>one</value></data>                                                       +
    </row>                                                                                  +
                                                                                            +
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">                    +
                                                                                            +
    <id>2</id>                                                                            +
    <data><value>two</value></data>                                                       +
    </row>                                                                                  +
                                                                                            +
    (1 row)
    
  • cursor_to_xml(cursor refcursor, count int, nulls boolean,tableforest boolean, targetns text)

    描述:该函数将关系表的内容映射成 XML 值,可理解为XML的导出功能,从cursor指定的游标中取出指定数量的行。

    返回值类型:xml

    示例:

    1、创建测试表并插入数据。

    CREATE TABLE xmltbl (a int,b text);
    INSERT INTO xmltbl VALUES (1,'one'),(2,'two'),(-1, null);
    

    2、声明一个游标。

    DECLARE XC CURSOR WITH HOLD FOR SELECT * FROM xmltbl ORDER BY 1,2;
    

    3、调用cursor_to_xml函数。

    SELECT cursor_to_xml('xc'::refcursor, 5, false, true,'');
    

    返回结果为:

                        cursor_to_xml
    ---------------------------------------------------------
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance">+
                                                            +
    <a>-1</a>                                            +
    </row>                                                 +
                                                            +
    <row xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance">+
                                                            +
    <a>1</a>                                             +
    <b>one</b>                                           +
    </row>                                                 +
                                                            +
    <row xmlns:xsi="http://xxxxxx/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

    示例:示例中使用的游标xc已创建,参考cursor_to_xml示例

    SELECT cursor_to_xmlschema('xc'::refcursor,  false, true,'');
    

    返回结果为:

                                            cursor_to_xmlschema
    
    ------------------------------------------------------------------------------------------
    --
    <xsd:schema
    +
        xmlns:xsd="http://xxxxxx/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.vastbase.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.vastbase.pg_catalog.text" minOccurs="0"></xsd:element
    >+
    </xsd:sequence>
    +
    </xsd:complexType>
    +
    
    +
    <xsd:element name="row" type="RowType"/>
    +
    
    +
    </xsd:schema>
    (1 row)
    
  • schema_to_xml(schema name, nulls boolean, tableforest boolean, targetns text)

    描述:把模式中的表映射成XML值。

    返回值类型:xml

    示例:

    SELECT schema_to_xml('public', true, true,'');
    
  • schema_to_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)

    描述:把模式中的表映射成XML模式文档。

    返回值类型:xml

    示例:

    select schema_to_xmlschema('public', true, true,'');
    
  • schema_to_xml_and_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)

    描述:把模式中的表映射成XML值和模式文档。

    返回值类型:xml

    示例:

    select schema_to_xml_and_xmlschema('public', true, true,'');
    
  • database_to_xml(nulls boolean, tableforest boolean, targetns text)

    描述:把数据库的表映射成XML值。

    返回值类型:xml

  • database_to_xmlschema(nulls boolean, tableforest boolean, targetns text)

    描述:把数据库的表映射成XML模式文档。

    返回值类型:xml

  • database_to_xml_and_xmlschema(nulls boolean, tableforest boolean, targetns text)

    描述:把数据库的表映射成XML值和模式文档。

    返回值类型:xml

  • table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)

    描述:该函数将关系表的内容映射成 XML 值,可理解为XML的导出功能,由参数tbl传递的命名表的内容,regclass类型接受使用常见标记标识表的字符串。

    返回值类型:xml

    示例:把表的内容转换成xml格式。示例中使用的xmltest表已创建,参考xmlagg示例

    select table_to_xml('xmltest'::regclass,true,true,'mydb');
    

    返回结果为:

                                    table_to_xml
    --------------------------------------------------------------------------------
    <_x0078_mltest xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">+
                                                                                +
    <id>1</id>                                                                  +
    <data><value>one</value></data>                                             +
    </_x0078_mltest>                                                              +
                                                                                +
    <_x0078_mltest xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">+
                                                                                +
    <id>2</id>                                                                  +
    <data><value>two</value></data>                                             +
    </_x0078_mltest>                                                              +
                                                                                +
    (1 row)
    
  • table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)

    描述:返回 XML 模式文档,这些文档描述上述对应函数所执行的映射。

    返回值类型:xml

    示例:把表的定义转换成xml格式。示例中使用的xmltest表已创建,参考xmlagg示例

    select table_to_xmlschema('xmltest'::regclass,true,true,'mydb');
    

    返回结果为:

                                        table_to_xmlschema
    ------------------------------------------------------------------------------------------
    <xsd:schema                                                                             +
        xmlns:xsd="http://xxxxxx/2001/XMLSchema"                                            +
        targetNamespace="mydb"                                                              +
        elementFormDefault="qualified">                                                     +
                                                                                            +
    <xsd:simpleType name="INTEGER">                                                         +
    <xsd:restriction base="xsd:int">                                                      +
        <xsd:maxInclusive value="2147483647"/>                                              +
        <xsd:minInclusive value="-2147483648"/>                                             +
    </xsd:restriction>                                                                    +
    </xsd:simpleType>                                                                       +
                                                                                            +
    <xsd:complexType mixed="true">                                                          +
    <xsd:sequence>                                                                        +
        <xsd:any name="element" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>+
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:complexType name="RowType.vastbase.public._x0078_mltest">                          +
    <xsd:sequence>                                                                        +
        <xsd:element name="id" type="INTEGER" nillable="true"></xsd:element>                +
        <xsd:element name="data" type="XML" nillable="true"></xsd:element>                  +
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:element name="_x0078_mltest" type="RowType.vastbase.public._x0078_mltest"/>        +
                                                                                            +
    </xsd:schema>
    (1 row)
    
  • table_to_xml_and_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)

    描述:产生XML数据映射和对应的XML模式,并把产生的结果链接在一起放在一个文档中。

    示例:把表的定义和表中的数据转换成xml格式。示例中使用的xmltest表已创建,参考xmlagg示例

    select table_to_xml_and_xmlschema('xmltest'::regclass,true,true,'mydb');
    

    返回结果为:

                                    table_to_xml_and_xmlschema
    ------------------------------------------------------------------------------------------
    <xsd:schema                                                                             +
        xmlns:xsd="http://xxxxxx/2001/XMLSchema"                                            +
        targetNamespace="mydb"                                                              +
        elementFormDefault="qualified">                                                     +
                                                                                            +
    <xsd:simpleType name="INTEGER">                                                         +
    <xsd:restriction base="xsd:int">                                                      +
        <xsd:maxInclusive value="2147483647"/>                                              +
        <xsd:minInclusive value="-2147483648"/>                                             +
    </xsd:restriction>                                                                    +
    </xsd:simpleType>                                                                       +
                                                                                            +
    <xsd:complexType mixed="true">                                                          +
    <xsd:sequence>                                                                        +
        <xsd:any name="element" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>+
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:complexType name="RowType.vastbase.public._x0078_mltest">                          +
    <xsd:sequence>                                                                        +
        <xsd:element name="id" type="INTEGER" nillable="true"></xsd:element>                +
        <xsd:element name="data" type="XML" nillable="true"></xsd:element>                  +
    </xsd:sequence>                                                                       +
    </xsd:complexType>                                                                      +
                                                                                            +
    <xsd:element name="_x0078_mltest" type="RowType.vastbase.public._x0078_mltest"/>        +
                                                                                            +
    </xsd:schema>                                                                           +
                                                                                            +
    <_x0078_mltest xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">          +
                                                                                            +
    <id>1</id>                                                                            +
    <data><value>one</value></data>                                                       +
    </_x0078_mltest>                                                                        +
                                                                                            +
    <_x0078_mltest xmlns:xsi="http://xxxxxx/2001/XMLSchema-instance" xmlns="mydb">          +
                                                                                            +
    <id>2</id>                                                                            +
    <data><value>two</value></data>                                                       +
    </_x0078_mltest>                                                                        +
                                                                                            +
    (1 row)