I am trying to extract a value from an xml element, located in an XMLTYPE column in an Oracle Table. The xml element which I am trying to extract have a parent for which a n
SELECT XMLAGG(XMLELEMENT(E,ename||',')).EXTRACT('//text()') "Result"
FROM emp
select a.*
from XMLTABLE(
XMLNAMESPACES('urn:www.someSite.com/myModel' AS "ns"),
'/*'
PASSING my.myColumn
COLUMNS
val VARCHAR2(2000) PATH '/a/ns:b/ns:c'
) a, myTable my;
Since the a
element does not have the namespace, you can first extract its child elements without using namespaces in the function, and then extract the value from the b
with the namespace:
Try:
select extract(extract(myColumn, 'a/*'),
'b/c/text()',
'xmlns=urn:www.someSite.com/myModel')
from myTable
When the default namespace changes, one way to specify namespaces is to write the wildcard character ('*') and the local-name() and namespace-uri() XPath functions.
select extract(myColumn, '/a/*[local-name()='b' and namespace-uri()='urn:www.someSite.com/myModel']/*[local-name()='c' and namespace-uri()='urn:www.someSite.com/myModel']')
from myTable