2006-12-21 17:05:16 +01:00
|
|
|
CREATE TABLE xmltest (
|
|
|
|
id int,
|
|
|
|
data xml
|
|
|
|
);
|
|
|
|
INSERT INTO xmltest VALUES (1, '<value>one</value>');
|
|
|
|
INSERT INTO xmltest VALUES (2, '<value>two</value>');
|
|
|
|
INSERT INTO xmltest VALUES (3, '<wrong');
|
2006-12-28 04:17:38 +01:00
|
|
|
ERROR: invalid XML content
|
2006-12-21 17:05:16 +01:00
|
|
|
DETAIL: Expected '>'
|
|
|
|
SELECT * FROM xmltest;
|
|
|
|
id | data
|
|
|
|
----+--------------------
|
|
|
|
1 | <value>one</value>
|
|
|
|
2 | <value>two</value>
|
|
|
|
(2 rows)
|
|
|
|
|
|
|
|
SELECT xmlcomment('test');
|
|
|
|
xmlcomment
|
|
|
|
-------------
|
|
|
|
<!--test-->
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlcomment('-test');
|
|
|
|
xmlcomment
|
|
|
|
--------------
|
|
|
|
<!---test-->
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlcomment('test-');
|
|
|
|
ERROR: invalid XML comment
|
|
|
|
SELECT xmlcomment('--test');
|
|
|
|
ERROR: invalid XML comment
|
|
|
|
SELECT xmlcomment('te st');
|
|
|
|
xmlcomment
|
|
|
|
--------------
|
|
|
|
<!--te st-->
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlconcat(xmlcomment('hello'),
|
|
|
|
xmlelement(NAME qux, 'foo'),
|
|
|
|
xmlcomment('world'));
|
|
|
|
xmlconcat
|
|
|
|
----------------------------------------
|
|
|
|
<!--hello--><qux>foo</qux><!--world-->
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlconcat('hello', 'you');
|
|
|
|
xmlconcat
|
|
|
|
-----------
|
|
|
|
helloyou
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlconcat(1, 2);
|
|
|
|
ERROR: argument of XMLCONCAT must be type xml, not type integer
|
|
|
|
SELECT xmlconcat('bad', '<syntax');
|
2006-12-28 04:17:38 +01:00
|
|
|
ERROR: invalid XML content
|
2006-12-21 17:05:16 +01:00
|
|
|
DETAIL: Expected '>'
|
|
|
|
SELECT xmlelement(name element,
|
|
|
|
xmlattributes (1 as one, 'deuce' as two),
|
|
|
|
'content');
|
|
|
|
xmlelement
|
|
|
|
------------------------------------------------
|
|
|
|
<element one="1" two="deuce">content</element>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlelement(name element,
|
|
|
|
xmlattributes ('unnamed and wrong'));
|
|
|
|
ERROR: unnamed attribute value must be a column reference
|
|
|
|
SELECT xmlelement(name element, xmlelement(name nested, 'stuff'));
|
|
|
|
xmlelement
|
|
|
|
-------------------------------------------
|
|
|
|
<element><nested>stuff</nested></element>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlelement(name employee, xmlforest(name, age, salary as pay)) FROM emp;
|
|
|
|
xmlelement
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
<employee><name>sharon</name><age>25</age><pay>1000</pay></employee>
|
|
|
|
<employee><name>sam</name><age>30</age><pay>2000</pay></employee>
|
|
|
|
<employee><name>bill</name><age>20</age><pay>1000</pay></employee>
|
|
|
|
<employee><name>jeff</name><age>23</age><pay>600</pay></employee>
|
|
|
|
<employee><name>cim</name><age>30</age><pay>400</pay></employee>
|
|
|
|
<employee><name>linda</name><age>19</age><pay>100</pay></employee>
|
|
|
|
(6 rows)
|
|
|
|
|
|
|
|
SELECT xmlelement(name wrong, 37);
|
|
|
|
ERROR: argument of XMLELEMENT must be type xml, not type integer
|
2006-12-28 04:17:38 +01:00
|
|
|
SELECT xmlparse(content 'abc');
|
|
|
|
xmlparse
|
|
|
|
----------
|
|
|
|
abc
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlparse(content '<abc>x</abc>');
|
|
|
|
xmlparse
|
|
|
|
--------------
|
|
|
|
<abc>x</abc>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlparse(document 'abc');
|
|
|
|
ERROR: invalid XML document
|
|
|
|
DETAIL: Start tag expected, '<' not found.
|
|
|
|
SELECT xmlparse(document '<abc>x</abc>');
|
|
|
|
xmlparse
|
|
|
|
--------------
|
|
|
|
<abc>x</abc>
|
|
|
|
(1 row)
|
|
|
|
|
2006-12-21 17:05:16 +01:00
|
|
|
SELECT xmlpi(name foo);
|
|
|
|
xmlpi
|
|
|
|
---------
|
|
|
|
<?foo?>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlpi(name xmlstuff);
|
|
|
|
ERROR: invalid XML processing instruction
|
|
|
|
DETAIL: XML processing instruction target name cannot start with "xml".
|
|
|
|
SELECT xmlpi(name foo, 'bar');
|
|
|
|
xmlpi
|
|
|
|
-------------
|
|
|
|
<?foo bar?>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlpi(name foo, 'in?>valid');
|
|
|
|
ERROR: invalid XML processing instruction
|
|
|
|
DETAIL: XML processing instruction cannot contain "?>".
|
2007-01-06 20:18:36 +01:00
|
|
|
SELECT xmlroot(xml '<foo/>', version no value, standalone no value);
|
|
|
|
xmlroot
|
|
|
|
-----------------------
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<foo/>
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlroot(xml '<foo/>', version '2.0');
|
|
|
|
xmlroot
|
|
|
|
-----------------------
|
|
|
|
<?xml version="2.0"?>
|
|
|
|
<foo/>
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlroot(xmlroot(xml '<foo/>', version '1.0'), version '1.1', standalone no);
|
|
|
|
xmlroot
|
|
|
|
---------------------------------------
|
|
|
|
<?xml version="1.1" standalone="no"?>
|
|
|
|
<foo/>
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
2006-12-21 17:05:16 +01:00
|
|
|
SELECT xmlroot (
|
|
|
|
xmlelement (
|
|
|
|
name gazonk,
|
|
|
|
xmlattributes (
|
|
|
|
'val' AS name,
|
|
|
|
1 + 1 AS num
|
|
|
|
),
|
|
|
|
xmlelement (
|
|
|
|
NAME qux,
|
|
|
|
'foo'
|
|
|
|
)
|
|
|
|
),
|
|
|
|
version '1.0',
|
|
|
|
standalone yes
|
|
|
|
);
|
2007-01-06 20:18:36 +01:00
|
|
|
xmlroot
|
|
|
|
----------------------------------------------------
|
|
|
|
<?xml version="1.0" standalone="yes"?>
|
|
|
|
<gazonk name="val" num="2"><qux>foo</qux></gazonk>
|
|
|
|
|
2006-12-21 17:05:16 +01:00
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlserialize(content data as character varying) FROM xmltest;
|
|
|
|
data
|
|
|
|
--------------------
|
|
|
|
<value>one</value>
|
|
|
|
<value>two</value>
|
|
|
|
(2 rows)
|
|
|
|
|
|
|
|
-- Check mapping SQL identifier to XML name
|
|
|
|
SELECT xmlpi(name ":::_xml_abc135.%-&_");
|
|
|
|
xmlpi
|
|
|
|
-------------------------------------------------
|
|
|
|
<?_x003A_::_x005F_xml_abc135._x0025_-_x0026__?>
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT xmlpi(name "123");
|
|
|
|
xmlpi
|
|
|
|
---------------
|
|
|
|
<?_x0031_23?>
|
|
|
|
(1 row)
|
|
|
|
|