我的以下查询效果很好,但我似乎无法在选项节点上获取内部文本。我如何获得,接收,存档或拒绝以显示在表格中?我尝试过使用$ i / text(),$ i /。等等。想法?
-r
答案 0 :(得分:1)
您可以将option
元素内容(使用text()
获取)转换为r
元素的属性:
select
x."VAL_LABEL",
x."LABEL",
x."NAME",
x."THE_VAL"
FROM
XMLTABLE(
'for $i in /metadata/fields/field/option
return element r{
attribute val_label {$i/text()},
$i/@value,
$i/../@label,
$i/../@name
}'
PASSING xmltype(
'<metadata>
...
</metadata>')
COLUMNS
val_label VARCHAR(32) PATH '@val_label',
the_val INTEGER PATH '@value',
name VARCHAR(32) PATH '@name',
label VARCHAR(32) PATH '@label') x;
获得:
VAL_LABEL LABEL NAME THE_VAL
-------------------------------- -------------------------------- -------------------------------- ----------
Required Capillary Pressure - MICP cusRc01 1
Received Capillary Pressure - MICP cusRc01 2
Archived Capillary Pressure - MICP cusRc01 3
Rejected Capillary Pressure - MICP cusRc01 4
N/A Capillary Pressure - MICP cusRc01 5
Required Fluid Sensitivity cusRc02 1
Received Fluid Sensitivity cusRc02 2
Archived Fluid Sensitivity cusRc02 3
Rejected Fluid Sensitivity cusRc02 4
N/A Fluid Sensitivity cusRc02 5
10 rows selected
您还可以将节点作为元素的最后一部分:
'for $i in /metadata/fields/field/option
return element r{
$i/@value,
$i/../@label,
$i/../@name,
$i/node()
}'
...然后使用@ gmiley的点表示法:
COLUMNS
val_label VARCHAR(32) PATH '.',
the_val INTEGER PATH '@value',
name VARCHAR(32) PATH '@name',
label VARCHAR(32) PATH '@label') x;
...它提供相同的输出。请注意,在所有属性之后,节点必须是元素调用中的最后一个。
答案 1 :(得分:-1)
尝试将列定义的最后一位更改为:
COLUMNS
val_label VARCHAR(32) PATH '.',
the_val INTEGER PATH '@value',
name VARCHAR(32) PATH '@name',
label VARCHAR(32) PATH '@label') x;
您已选择option
,因此您将选择option/option
之前的方式。