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) |