|     XML内容生成部分  |  
  
 
   
   |   SQL数据生成XML的函数。 |  
  
 
   
   | 1. xmlcomment:生成注释函数。   |  
  
 
   
   | xmlcomment(text )  |  
  
 
   
   | 例: |  
  
 
   
    |  
  
 
   
   | SELECT xmlcomment('hello'); |  
  
 
   
   |   xmlcomment |  
  
 
   
   | -------------- |  
  
 
   
   |  <!--hello--> |  
  
 
   
    |  
  
 
   
   | 2. xmlconcat:XML连接函数   |  
  
 
   
   |  xmlconcat(xml [,...])  |  
  
 
   
   | 例: |  
  
 
   
   | SELECT xmlconcat('<abc/>','<bar>foo</bar>'); |  
  
 
   
    |  
  
 
   
   |   xmlconcat |  
  
 
   
   | ---------------------- |  
  
 
   
   |  <abc/><bar>foo</bar> |  
  
 
   
    |  
  
 
   
   | 连接的XML数据中如果有多个版本声明的话,连接后的XML只有一个版本声明。 |  
  
 
   
   | 例: |  
  
 
   
   | SELECT xmlconcat('<?xml version="1.1"?><foo/>','<?xml version="1.1" standalone="no"?><bar/>'); |  
  
 
   
    |  
  
 
   
   |   xmlconcat |  
  
 
   
   | ----------------------------------- |  
  
 
   
   |  <?xml version="1.1"?><foo/><bar/> |  
  
 
   
    |  
  
 
   
   | 3. xmlelement:生成XML元素函数   |  
  
 
   
   |  xmlelement(name name  [,xmlattributes( value  [AS  attname ] [,... ])] [ ,content,... ])  |  
  
 
   
   | 例: |  
  
 
   
   | SELECT xmlelement(name foo); |  
  
 
   
   |  xmlelement |  
  
 
   
   | ------------ |  
  
 
   
   |  <foo/> |  
  
 
   
    |  
  
 
   
   | SELECT xmlelement(name foo,xmlattributes('xyz' as bar)); |  
  
 
   
   |   xmlelement |  
  
 
   
   | ------------------ |  
  
 
   
   |  <foo bar="xyz"/> |  
  
 
   
    |  
  
 
   
   | SELECT xmlelement(name foo,xmlattributes(current_date as bar),'cont','ent'); |  
  
 
   
   |   xmlelement |  
  
 
   
   | ------------------------------------- |  
  
 
   
   |  <foo bar="2007-01-26">content</foo> |  
  
 
   
    |  
  
 
   
   | 如果有非法字符的话,非常字符会用 16进制的数字表示出来。  |  
  
 
   
   | 例子:SELECT xmlelement(name "foo$bar",xmlattributes('xyz' as "a&b")); |  
  
 
   
   |   xmlelement |  
  
 
   
   | ---------------------------------- |  
  
 
   
   |  <foo_x0024_bar a_x0026_b="xyz"/> |  
  
 
   
    |  
  
 
   
   | 4. xmlforest:生成XML FOREST函数   |  
  
 
   
   |  xmlforest(content  [AS  name ] [,...])  |  
  
 
   
   | 例: |  
  
 
   
   | SELECT xmlforest('abc' AS foo,123 AS bar); |  
  
 
   
   |   xmlforest |  
  
 
   
   | ------------------------------ |  
  
 
   
   |  <foo>abc</foo><bar>123</bar> |  
  
 
   
    |  
  
 
   
   | SELECT xmlforest(table_name,column_name) |  
  
 
   
   | FROM information_schema.columns |  
  
 
   
   | WHERE table_schema = 'pg_catalog'; |  
  
 
   
   |   xmlforest |  
  
 
   
   | ------------------------------------------------------------------------------------------- |  
  
 
   
   |  <table_name>pg_authid</table_name><column_name>rolname</column_name> |  
  
 
   
   |  <table_name>pg_authid</table_name><column_name>rolsuper</column_name> |  
  
 
   
   |  ... |  
  
 
   
   | 5. xmlpi:生成XML处理命令函数。   |  
  
 
   
   |  xmlpi(name target  [, content ])  |  
  
 
   
   | 例: |  
  
 
   
   | SELECT xmlpi(name php,'echo "hello world";'); |  
  
 
   
   |   xmlpi |  
  
 
   
   | ----------------------------- |  
  
 
   
   |  <?php echo "hello world";?> |  
  
 
   
    |  
  
 
   
   | 6. xmlroot:修改XML值的根节点属性函数   |  
  
 
   
   |  xmlroot(xml ,version  text  |no value [,standalone yes|no|no value])  |  
  
 
   
   | 例子:SELECT xmlroot(xmlparse(document '<?xml version="1.1"?><content>abc</content>'), |  
  
 
   
   |   version '1.0',standalone yes); |  
  
 
   
   |   xmlroot |  
  
 
   
   | ---------------------------------------- |  
  
 
   
   |  <?xml version="1.0" standalone="yes"?> |  
  
 
   
   |  <content>abc</content> |  
  
 
   
    |  
  
 
   
   | 7. xmlagg:xmlagg是集约函数   |  
  
 
   
   | xmlagg(xml )  |  
  
 
   
   | 例: |  
  
 
   
   | CREATE TABLE test (y int,x xml); |  
  
 
   
   | INSERT INTO test VALUES (1,'<foo>abc</foo>'); |  
  
 
   
   | INSERT INTO test VALUES (2,'<bar/>'); |  
  
 
   
   | SELECT xmlagg(x) FROM test; |  
  
 
   
   |   xmlagg |  
  
 
   
   | ---------------------- |  
  
 
   
   |  <foo>abc</foo><bar/> |  
  
 
   
    |  
  
 
   
   | 可以用下面类型的方法改变连接顺序。  |  
  
 
   
   | SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab; |  
  
 
   
   |   xmlagg |  
  
 
   
   | ---------------------- |  
  
 
   
   |  <bar/><foo>abc</foo> |  
  
 
   
    |  
  
 
   
   | Processing XML  |  
  
 
   
   | 为了处理XML数据,PostgreSL中提供了xpath函数。 |  
  
 
   
   | xpath(xpath , xml [, nsarray ])  |  
  
 
   
    |  
  
 
   
   | 例: |  
  
 
   
   | 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) |  
  
 
   
    |  
  
 
   
   | XML和table的映射  |  
  
 
   
   | 以下函数可以导出XML。 |  
  
 
   
   | table_to_xml(tbl regclass,nulls boolean,tableforest boolean,targetns text) |  
  
 
   
   | query_to_xml(query text,targetns text) |  
  
 
   
   | cursor_to_xml(cursor refcursor,count int, |  
  
 
   
   |   tableforest boolean,targetns text) |  
  
 
   
   | 这些函数的返回值都是XML类型。 |  
  
 
   
    |  
  
 
   
   | 还有以下函数。具体内容可以参看用户手册。 |  
  
 
   
   | table_to_xmlschema(tbl regclass,targetns text) |  
  
 
   
   | query_to_xmlschema(query text,targetns text) |  
  
 
   
   | cursor_to_xmlschema(cursor refcursor,targetns text) |  
  
 
   
   | table_to_xml_and_xmlschema(tbl regclass,targetns text) |  
  
 
   
   | query_to_xml_and_xmlschema(query text,targetns text) |  
  
 
   
   | schema_to_xml(schema name,targetns text) |  
  
 
   
   | schema_to_xmlschema(schema name,targetns text) |  
  
 
   
   | schema_to_xml_and_xmlschema(schema name,targetns text) |  
  
 
   
   | database_to_xml(nulls boolean,targetns text) |  
  
 
   
   | database_to_xmlschema(nulls boolean,targetns text) |  
  
 
   
   | database_to_xml_and_xmlschema(nulls boolean,targetns text) |