Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 数据库中的 XML » 在数据库中使用 XML » 使用 SQL/XML 以 XML 形式获取查询结果

 

使用 XMLELEMENT 函数

XMLELEMENT 函数利用关系数据来构建 XML 元素。您可以指定所生成元素的内容,而且,如果需要,还可以为该元素指定属性和属性内容。

生成嵌套元素

以下查询将生成嵌套的 XML,也就是为每个产品生成一个 <product_info> 元素,而该元素中还包含一些用于提供每种产品的名称、数量和说明的元素:

SELECT ID,
XMLELEMENT( NAME product_info,
            XMLELEMENT( NAME item_name, Products.name ),
            XMLELEMENT( NAME quantity_left, Products.Quantity ),
            XMLELEMENT( NAME description, Products.Size || ' ' ||
                        Products.Color || ' ' || Products.name )
          ) AS results
FROM Products
WHERE Quantity > 30;

此查询会生成以下结果:

ID results
301
<product_info>
 <item_name>Tee Shirt
  </item_name>
 <quantity_left>54
  </quantity_left>
 <description>Medium Orange
  Tee Shirt</description>
</product_info>
302
<product_info>
 <item_name>Tee Shirt
  </item_name>
 <quantity_left>75
  </quantity_left>
 <description>One Size fits
  all Black Tee Shirt
  </description>
</product_info>
400
<product_info>
 <item_name>Baseball Cap
  </item_name>
 <quantity_left>112
  </quantity_left>
 <description>One Size fits
  all Black Baseball Cap
  </description>
</product_info>
... ...
指定元素内容

使用 XMLELEMENT 函数,您可以指定元素的内容。以下语句将生成一个包含内容 hat 的 XML 元素。

SELECT ID, XMLELEMENT( NAME product_type, 'hat' )
FROM Products
WHERE Name IN ( 'Baseball Cap', 'Visor' );
生成有属性的元素

通过在查询中加入 XMLATTRIBUTES 参数为元素添加属性。此参数指定属性名称和内容。以下语句会为每个项目的 name、Color 和 UnitPrice 生成一个属性。

SELECT ID, XMLELEMENT( NAME item_description,
                       XMLATTRIBUTES( Name,
                                       Color,
                                       UnitPrice )
                      ) AS item_description_element
FROM Products
WHERE ID > 400;

通过指定 AS 子句可以命名属性:

SELECT ID, XMLELEMENT( NAME item_description,
                       XMLATTRIBUTES ( UnitPrice AS
                                        price ),
                       Products.name
                     ) AS products
FROM Products
WHERE ID > 400;

有关详细信息,请参见XMLELEMENT 函数 [String]

示例

以下示例将 XMLELEMENT 与 HTTP web 服务搭配使用。

ALTER PROCEDURE "DBA"."http_header_example_with_table_proc"()
RESULT ( res LONG VARCHAR )
BEGIN
   DECLARE var LONG VARCHAR;
   DECLARE varval LONG VARCHAR;
   DECLARE I INT;
 DECLARE res LONG VARCHAR;
 DECLARE tabl XML;
   SET var  = NULL;
loop_h:  
   LOOP
      SET var = NEXT_HTTP_HEADER( var );
      IF var IS NULL THEN LEAVE leave loop_h END IF;
      SET varval = http_header( var );
      -- ... do some action for <var,varval> pair...
        SET tabl = tabl || 
                        XMLELEMENT( name "tr", 
                        XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ),
                        XMLELEMENT( name "td", var ),
                        XMLELEMENT( name "td", varval ) )  ;
         
   END LOOP;

    SET res = XMLELEMENT( NAME "table",
                XMLATTRIBUTES( '' AS "BORDER", '10' as "CELLPADDING", '0' AS "CELLSPACING" ),

                XMLELEMENT( NAME "th", 
                    XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ),
                    'Header Name' ), 
                
                XMLELEMENT( NAME "th", 
                    XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ),
                    'Header Value' ),
           
                 tabl ) ;
    SELECT res;
END