Xpath 和 Oracle XMLTABLE

Xpath and Oracle XMLTABLE

我有一个包含 XML 的 CLOB。

<attrs>
    <attr name="1">
        <string>stringvalue</string>
    </attr>
    <attr name="2">
        <integer>1</integer>
    </attr>
    <attr name="3">
        <integer>2</integer>
    </attr>
    <attr name="4">
        <boolean>false</boolean>
    </attr>
</attrs>

如何获得 only 布尔属性和 name 属性?

XMLTABLE('/attrs/attr/boolean'
    PASSING XMLTYPE(CLOB)
    COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '???',
            ATTRIBUTEVALUE VARCHAR2(5) PATH '.'
) X

这样,我只有值,怎么也能得到父@name? 我可以使用 '/attrs/attr' 但我不知道如何只获取布尔值(也许我需要在之后过滤?)

谢谢!

您可以通过以下方式在列路径中返回树:

'./../@name'

所以得到:

XMLTABLE('/attrs/attr/boolean'
    PASSING XMLTYPE(CLOB)
    COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH './../@name',
            ATTRIBUTEVALUE VARCHAR2(5) PATH '.'
) X

你的数据得到:

ATTRIBUTENAME ATTRIBUTEVALUE
------------- --------------
4             false

您还可以在主 XPath 中应用子节点过滤器:

'/attrs/attr[boolean]'

然后获取 attr 节点的名称及其子 boolean 节点,给出:

XMLTABLE('/attrs/attr[boolean]'
    PASSING XMLTYPE(your_CLOB)
    COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '@name',
            ATTRIBUTEVALUE VARCHAR2(5) PATH 'boolean'
) X

得到相同的结果。

db<>fiddle