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()}}' PASSING d.xml AS "doc" COLUMNS xpath varchar2(4000) path '/data/@path', text varchar2(4000) path '/data/@value' )UNION ALLselect xpath, textfrom xml_data d CROSS JOIN XMLTable( 'for $i in $doc/descendant- or-self::* let $path :=$i/string-join(ancestor-or-self::*/name(.), ''/'') for $j in $i/attribute::* return {attribute path { concat( $path, "/@", $j/name(.) ) }, attribute value {$j}}' PASSING d.xml AS "doc" COLUMNS xpath varchar2 (4000) パス '/data/@path'、テキスト varchar2(4000) パス '/data/@value' )
プレ>
結果
:
<プレ>| XPATH |テキスト ||--------------------------------|--------||アルファ | (ヌル) ||アルファ/ベータ | 0123 ||アルファ/ガンマ | 2345 ||アルファ/デルタ | (ヌル) ||アルファ/デルタ/イプシロン | 3 ||アルファ/ガンマ/@attribute1 |値1 ||アルファ/デルタ/@attribute2 |値2 ||アルファ/デルタ/エプシロン/@attribute3 |値3 ||アルファ/デルタ/エプシロン/@attribute4 | value4 |
プレ>