【发布时间】:2017-04-13 06:14:00
【问题描述】:
我正在尝试查询 XMLType 以获得条件返回。
我的 xml 查询:
with tab as (
select XMLType(
'<Obj name="Job" id="1">
<Steps>
<StepType2>
<StepOptions>
<Attribute name="attr1" value="val1"/>
<Attribute name="attr2" value="val2"/>
<Attribute name="attr3" value="val3"/>
</StepOptions>
</StepType2>
<StepType1 type="flow" name="flowval" id="103"/>
<StepType1 type="data" name="dataval" id="104"/>
<StepType2>
<StepOptions>
<Attribute name="attr1" value="val5"/>
<Attribute name="attr2" value="val6"/>
</StepOptions>
</StepType2>
</Steps>
</Obj>') as xmldata
from dual
)
select x.*
from tab,
XMLTable( 'for $i in $XmlData//*
return $i'
PASSING xmldata as "XmlData"
COLUMNS node VARCHAR2(2000) PATH 'name()',
name VARCHAR2(2000) PATH '@name',
id VARCHAR2(2000) PATH '@id'
) x
我在 XML DB oracle、xPath 等上进行了太多搜索,但我不知道如何实现我的目标。
- 显示所有 Steps 元素及其根父级,在本例中,根为 'Obj'
- 如果节点名称 = 'StepType2' 那么
如果只有 name = 'attr1' 和
,则 ATTR_NAME 字段获取值 如果只有 name = 'attr2',则 ATTR_VAL 字段获取值 - 如果节点名称 = 'StepType1' 那么其简单的 ATTR_NAME = @type, ATTR_VAL=@name 和 ATTR_ID=@id
我不知道是否有可能,但任何开始的想法都会很棒?
【问题讨论】: