首页 > 解决方案 > Xpath 和 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>

我怎样才能获得布尔属性和名称属性?

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

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

谢谢!

标签: oraclexpathoracle12c

解决方案


您可以使用以下命令在列路径中向上走回树:

'./../@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<>小提琴


推荐阅读