Oracle 数据库 10g 企业版 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"/>