patternMinor
Postgresql query XMLTable with default namespace
Viewed 0 times
postgresqlwithquerydefaultxmltablenamespace
Problem
I use PostgreSQL 12 to query XML data.
My data is as below
When query, my SQL is as below:
It happened this error:
Please instruct how to fix it ?
Many thanks.
My data is as below
CREATE TABLE xmldata AS SELECT
xml $
AU
Australia
JP
Japan
Shinzo Abe
145935
SG
Singapore
697
$ AS data;When query, my SQL is as below:
SELECT xmltable.*
FROM xmldata,
XMLTABLE(namespaces(default 'http://x.y.z'), '//ROWS/ROW'
PASSING data
COLUMNS id int PATH '@id',
ordinality FOR ORDINALITY,
"COUNTRY_NAME" text,
country_id text PATH 'COUNTRY_ID',
size_sq_km float PATH 'SIZE[@unit = "sq_km"]',
size_other text PATH
'concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)',
premier_name text PATH 'PREMIER_NAME' DEFAULT 'not specified') ;It happened this error:
DEFAULT namespace is not supportedPlease instruct how to fix it ?
Many thanks.
Solution
As documented in the manual "A default namespace specification is not currently supported"
You need to give the namespace an alias and use that in the XPath expressions:
Online example
You need to give the namespace an alias and use that in the XPath expressions:
SELECT xmltable.*
FROM xmldata,
XMLTABLE(
xmlnamespaces('http://x.y.z' as x),
'//x:ROWS/x:ROW'
PASSING data
COLUMNS
id int PATH '@id',
ordinality FOR ORDINALITY,
"x:COUNTRY_NAME" text,
country_id text PATH 'x:COUNTRY_ID',
size_sq_km float PATH 'x:SIZE[@unit = "sq_km"]',
size_other text PATH
'concat(x:SIZE[@unit!="sq_km"], " ", x:SIZE[@unit!="sq_km"]/@unit)',
premier_name text PATH 'x:PREMIER_NAME' DEFAULT 'not specified'
) ;Online example
Code Snippets
SELECT xmltable.*
FROM xmldata,
XMLTABLE(
xmlnamespaces('http://x.y.z' as x),
'//x:ROWS/x:ROW'
PASSING data
COLUMNS
id int PATH '@id',
ordinality FOR ORDINALITY,
"x:COUNTRY_NAME" text,
country_id text PATH 'x:COUNTRY_ID',
size_sq_km float PATH 'x:SIZE[@unit = "sq_km"]',
size_other text PATH
'concat(x:SIZE[@unit!="sq_km"], " ", x:SIZE[@unit!="sq_km"]/@unit)',
premier_name text PATH 'x:PREMIER_NAME' DEFAULT 'not specified'
) ;Context
StackExchange Database Administrators Q#256582, answer score: 4
Revisions (0)
No revisions yet.