Bạn có thể sử dụng XMLTable
để tạo danh sách các đường dẫn với XQuery.
Ví dụ.
( SQLFiddle )
with params as (
select
xmltype('
<ALFA>
<BETA>0123</BETA>
<GAMMA>2345</GAMMA>
<DELTA>
<EPSILON>3</EPSILON>
</DELTA>
</ALFA>
') p_xml
from dual
)
select
path_name || '/text()'
from
XMLTable(
'
for $i in $doc/descendant-or-self::*
return <element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
'
passing (select p_xml from params) as "doc"
columns path_name varchar2(4000) path '//element_path'
)
nhưng đó là một cách sai ít nhất vì nó không hiệu quả như nó có thể.
Chỉ cần trích xuất tất cả các giá trị có cùng XQuery :( SQLFiddle )
with params as (
select
xmltype('
<ALFA>
<BETA>0123</BETA>
<GAMMA>2345</GAMMA>
<DELTA>
<EPSILON>3</EPSILON>
</DELTA>
</ALFA>
') p_xml
from dual
)
select
element_path, element_text
from
XMLTable(
'
for $i in $doc/descendant-or-self::*
return <element>
<element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
<element_content> {$i/text()}</element_content>
</element>
'
passing (select p_xml from params) as "doc"
columns
element_path varchar2(4000) path '//element_path',
element_text varchar2(4000) path '//element_content'
)