element-name-expression
An identifier. For each row, an XML element with the same name as the identifier is generated.
attribute-value-expression
An attribute of the element. This optional argument allows you to specify an attribute value for the generated element.
This argument specifies the attribute name and content. If the attribute-value-expression is a column name, then the attribute name defaults to the column name. You can change the attribute name by specifying the
attribute-nameargument.
element-content-expression
The content of the element. This can be any string expression. You can specify an unlimited number of element-content-expression arguments and they are concatenated together. For example, the following SELECT statement returns the value <x>abcdef</x>:
NULL element values and NULL attribute values are omitted from the result. The letter case for both element and attribute
names is taken from the query.
Element content is always escaped unless the data type is XML. Invalid element and attribute names are also quoted. For example,
consider the following statement:
SELECT XMLELEMENT('H1', f_get_page_heading() );
If the function f_get_page_heading is defined as RETURNS LONG VARCHAR or RETURNS VARCHAR(1000), then the result is HTML encoded:
CREATE FUNCTION f_get_page_heading() RETURNS LONG VARCHAR
BEGIN
RETURN ('<B>My Heading</B>');
END;
The above SELECT statement returns the following:
<H1><B>My Heading</B></H1>
If the function is declared as RETURNS XML, then the above SELECT statement returns the following:
XMLELEMENT functions can be nested to create a hierarchy. If you want to return different elements at the same level of the
document hierarchy, use the XMLFOREST function.
Data in BINARY, LONG BINARY, IMAGE, and VARBINARY columns is automatically returned in base64-encoded format when you execute
a query that contains the XMLELEMENT function.
SQL/2008
XMLELEMENT constitutes part of optional SQL/2008 language feature X031. Omitting the NAME keyword and using a string
expression as the first argument is a vendor extension. SQL Anywhere does not support the optional OPTION clause with the
XMLELEMENT function.
The following example produces an <item_name> element for each product in the result set, where the product name is the content
of the element.
SELECT ID, XMLELEMENT( NAME item_name, p.Name )
FROM Products p
WHERE ID > 400;
The following example returns <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'
);
The following example returns <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' )
)
)
);
The following example returns'<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' );