Настройка на схема на Oracle 11g R2 :
CREATE TABLE xml_data ( xml ) AS SELECT XMLTYPE(' 0123 2345 3 ') ОТ ДВОЙНО;
Заявка 1 :
select xpath, textfrom xml_data d CROSS JOIN XMLTable( 'for $i in $doc/descendant-or-self::* let $path :=$i/string-join(ancestor-or-self::*/name(.), ''/'') return {attribute path {$path}, attribute value {$i/text()}}' ПРЕДАВАНЕ на d.xml КАТО "doc" КОЛОНИ xpath varchar2(4000) път '/data/@path', текст varchar2(4000) път '/data/@value' )UNION ALLselect xpath, textfrom xml_data d CROSS JOIN XMLTable( 'за $i в $doc/descendant- or-self::* let $path :=$i/string-join(ancestor-or-self::*/name(.), ''/'') за $j в $i/attribute::* return {attribute path { concat( $path, "/@", $j/name(.) ) }, attribute value {$j}}' ПРЕДАВАНЕ d.xml AS "doc" COLUMNS xpath varchar2 (4000) път '/data/@path', текст varchar2(4000) път '/data/@value' )
<предварителен код>| XPATH | ТЕКСТ ||--------------------------------|--------|| АЛФА | (нула) || АЛФА/БЕТА | 0123 || АЛФА/ГАМА | 2345 || АЛФА/ДЕЛТА | (нула) || ALFA/DELTA/EPSILON | 3 || ALFA/GAMMA/@attribute1 | стойност1 || ALFA/DELTA/@attribute2 | стойност2 || ALFA/DELTA/EPSILON/@attribute3 | стойност3 || ALFA/DELTA/EPSILON/@attribute4 | стойност4 |