Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
在查询中生成一个 XML 元素。
XMLELEMENT( { NAME element-name-expression } | string-expression [, XMLATTRIBUTES ( attribute-value-expression [ AS attribute-name ],... ) ] [, element-content-expression,... ] )
element-name-expression 一个标识符。为每一行生成一个与标识符同名的 XML 元素。
attribute-value-expression 元素的一个特性。此可选参数允许指定所生成的元素的属性。此参数指定属性名称和内容。如果 attribute-value-expression 为某一列名称,则属性名称缺省为列名称。可通过指定 attribute-name argument 来更改特性名。
element-content-expression 元素的内容。可以是任意字符串表达式。可以指定任意数量的 element-content-expression 参数,这些参数将被连接到一起。例如,以下 SELECT 语句返回值 <x>abcdef</x>:
SELECT XMLELEMENT( NAME x, 'abc', 'def' );
XML
结果中将会忽略 NULL 元素值和 NULL 特性值。元素与特性名的字母大小写均依据查询来确定。
始终将元素内容转义,除非数据类型为 XML。无效的元素和属性名称也加上引号。例如,请看以下语句:
SELECT XMLELEMENT('H1', f_get_page_heading() );
如果函数 f_get_page_heading 定义为 RETURNS LONG VARCHAR 或 RETURNS VARCHAR(1000),则结果采用 HTML 编码:
CREATE FUNCTION f_get_page_heading() RETURNS LONG VARCHAR BEGIN RETURN ('<B>My Heading</B>'); END;
以上的 SELECT 语句返回以下结果:
<H1><B>My Heading</B></H1>
如果此函数声明为 RETURNS XML,则以上 SELECT 语句返回以下结果:
<H1><B>My Heading</B></H1>
有关添加引号和 XMLELEMENT 函数的详细信息,请参见无效的名称和 SQL/XML。
XMLELEMENT 函数可通过嵌套使用来创建层次。要返回处于文档层次中同一级别的不同元素,请使用 XMLFOREST 函数。
有关详细信息,请参见XMLFOREST 函数 [String]。
执行包含 XMLELEMENT 函数的查询时,将自动以 base64 编码格式返回 BINARY、LONG BINARY、IMAGE 和 VARBINARY 列中的数据。
SQL/2008 XMLELEMENT 是可选 SQL/2008 语言功能 X031 的组成部分。忽略 NAME 关键字和使用字符串表达式作为第一个参数是一个服务商扩充。SQL Anywhere 不支持可选的 OPTION 子句与 XMLELEMENT 函数结合使用。
以下示例为结果集中的每个产品生成一个 <item_name> 元素,其中产品名为元素的内容。
SELECT ID, XMLELEMENT( NAME item_name, p.Name ) FROM Products p WHERE ID > 400;
以下示例返回 <A HREF="http://www.ianywhere.com/" TARGET="_top">iAnywhere web site</A>:
<A HREF="http://www.ianywhere.com/" TARGET="_top">iAnywhere web site</A>
SELECT XMLELEMENT( 'A', XMLATTRIBUTES( 'http://www.ianywhere.com/' AS "HREF", '_top' AS "TARGET"), 'iAnywhere web site' );
以下示例返回 <table><tbody><tr align="center" valign="top"><td>Cell 1 info</td><td>Cell 2 info</td></tr></tbody></table>:
<table><tbody><tr align="center" valign="top"><td>Cell 1 info</td><td>Cell 2 info</td></tr></tbody></table>
SELECT XMLELEMENT( name "table", XMLELEMENT( name "tbody", XMLELEMENT( name "tr", XMLATTRIBUTES('center' AS "align", 'top' AS "valign"), XMLELEMENT( name "td", 'Cell 1 info' ), XMLELEMENT( name "td", 'Cell 2 info' ) ) ) );
以下示例返回 '<x>abcdef</x>','<custom_element>abcdef</custom_element>':
'<x>abcdef</x>','<custom_element>abcdef</custom_element>'
CREATE VARIABLE @my_element_name VARCHAR(200); SET @my_element_name = 'custom_element'; SELECT XMLELEMENT( NAME x, 'abc', 'def' ), XMLELEMENT( @my_element_name,'abc', 'def' );