【问题标题】:Xpath and Oracle XMLTABLEXpath 和 Oracle XMLTABLE
【发布时间】:2021-05-27 19:06:37
【问题描述】:

我有一个包含 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',但我不知道如何只获取布尔值(也许我需要在之后过滤?)

谢谢!

【问题讨论】:

    标签: oracle xpath oracle12c


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,我现在很清楚了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2012-03-08
    • 2017-04-13
    • 1970-01-01
    • 2012-09-23
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多