Oracle Database 10g Enterprise Edition リリース 10.2.0.5 - 64bi
見つけた要素から、祖先または自己を使用してルートに階層を出力しようとしていますが、まったく機能しません。すべての要素を出力するだけです(
さて、私が持っているもの:
1) このような XML ファイル。
<Root>
<Element1 id="UniqueId1">
<SubElement1 id="UniqueId2"/>
<SubElement2 id="UniqueId3">
<LeafElement1 id="UniqueId4"/>
<LeafElement1 id="UniqueId5"/>
</SubElement2>
</Element1>
<Element2 id="UniqueId6" AttributeToCheck="true">
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
<LeafElement1 id="UniqueId9"/>
</SubElement1>
</Element2>
</Root>
2) 私の XPATH 文字列:
//*[@id and contains(@id, "UniqueId8")]/ancestor-or-self::*
3) 次のような結果を取得したい (見つかった要素からルートまで):
<Root>
<Element2 id="UniqueId6" AttributeToCheck="true">
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
</SubElement1>
</Element2>
</Root>
ところで、 // [@id and contains(@id, "UniqueId8")]/ancestor-or-self:: /@id は問題なく動作します。
この問題を解決する方法を知っている人はいますか、それとも祖先または自己の代わりに別の操作を使用するだけですか?
アップデート:
私はこれを実行します:
DECLARE
v_xml XMLTYPE;
BEGIN
SELECT xmltype('<Root>
<Element1 id="UniqueId1">
<SubElement1 id="UniqueId2"/> <SubElement2 id="UniqueId3">
<LeafElement1 id="UniqueId4"/>
<LeafElement1 id="UniqueId5"/>
</SubElement2>
</Element1>
<Element2 id="UniqueId6" AttributeToCheck="true">
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
<LeafElement1 id="UniqueId9"/>
</SubElement1>
</Element2>
</Root>')
into v_xml
from dual;
select extract(v_xml, '//*[@id="UniqueId9"]/ancestor-or-self::*')
into v_xml
from dual;
dbms_output.put_line(v_xml.getStringVal());
END;
しかし、結果として、私は何か奇妙なものを得ました:
<Root>
<Element1 id="UniqueId1">
<SubElement1 id="UniqueId2"/>
<SubElement2 id="UniqueId3">
<LeafElement1 id="UniqueId4"/>
<LeafElement1 id="UniqueId5"/>
</SubElement2>
</Element1>
<Element2 id="UniqueId6" AttributeToCheck="true">
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
<LeafElement1 id="UniqueId9"/>
</SubElement1></Element2>
</Root>
<Element2 id="UniqueId6" AttributeToCheck="true">
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
<LeafElement1 id="UniqueId9"/>
</SubElement1>
</Element2>
<SubElement1 id="UniqueId7">
<LeafElement1 id="UniqueId8"/>
<LeafElement1 id="UniqueId9"/>
</SubElement1>
<LeafElement1 id="UniqueId9"/>