首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle XMLTABLE和XPATH

Oracle XMLTABLE和XPATH
EN

Stack Overflow用户
提问于 2021-03-29 10:19:46
回答 1查看 557关注 0票数 0

我对Xpath有点迷茫,我正在尝试从XML中获取属性,我目前正在使用:

代码语言:javascript
复制
XMLTABLE('/attrs/attr[@name="ImagesWEB"]/string'
    PASSING XMLTYPE(XML)
    COLUMNS IMAGESWEB VARCHAR2(100) PATH '.'
)

但是我需要一个属性名为Image2的其他值,所以我做了另一个XMLTABLE,但是我想这不是正确的方法,我必须使用XMLTABLE(‘/attrs/attr’)。有两列,但不知道如何获得两者(Image2可能从XML数据中丢失)表单XPATH?

这里有一个XML示例(针对我的产品的CLOB):

代码语言:javascript
复制
<attrs>
    <attr multiple="true" name="Image2">
        <string>IMG2.PNG</string>
        <string>IMG3.PNG</string>
        <string>IMG4</string>
    </attr>
    <attr multiple="true" name="ImagesWEB">
        <string>IMG.PNG</string>
    </attr>
    <attr name="ShortLink">
        <string>/PRODUCT.html</string>
    </attr>
    <attr name="TITRE">
        <string>TITLE</string>
    </attr>
    <attr name="name">
        <string>PRODUCT</string>
    </attr>
</attrs>

Thansk!
EN

回答 1

Stack Overflow用户

发布于 2021-03-29 11:03:17

您可以更改主XPath以获取attrs,然后在XPathfor每个columns子句中筛选所需的内容:

代码语言:javascript
复制
XMLTABLE('/attrs'
    PASSING XMLTYPE(XML)
    COLUMNS
      IMAGESWEB VARCHAR2(100) PATH 'attr[@name="ImagesWEB"]/string',
      IMAGE2 VARCHAR2(100) PATH 'attr[@name="Image2"]/string'
)

db<>fiddle有一些虚构的数据.

但是,如果我有两个值(可能会发生),该怎么办?

如果您可以在一个属性下拥有多个string节点,那么您可以从一个XMLTable调用中获得两个attr节点,然后再有两个attr节点(每个攻击一个)来获取字符串:

代码语言:javascript
复制
SELECT t.id, x2.imagesweb, x3.image2
FROM your_table t
CROSS APPLY
XMLTABLE('/attrs'
    PASSING XMLTYPE(t.XML)
    COLUMNS
      IMAGESWEB XMLTYPE PATH 'attr[@name="ImagesWEB"]',
      IMAGE2 XMLTYPE PATH 'attr[@name="Image2"]'
) x1
OUTER APPLY
XMLTABLE('/attr/string'
    PASSING x1.imagesweb
    COLUMNS
      IMAGESWEB VARCHAR2(100) PATH '.'
) x2
OUTER APPLY
XMLTABLE('/attr/string'
    PASSING x1.image2
    COLUMNS
      IMAGE2 VARCHAR2(100) PATH '.'
) x3
代码语言:javascript
复制
ID IMAGESWEB  IMAGE2
-- ---------  ----------
 1 ABC        DEF
 2 ABC
 3            DEF
 3            DEF2
 4 IMG.PNG    IMG2.PNG
 4 IMG.PNG    IMG3.PNG
 4 IMG.PNG    IMG4

db<>fiddle混合了合成数据和样本数据.

这使用交叉应用和外部应用(因为其中一个或另一个属性可能不存在),这些属性是可用的来自Oracle 12c (12.1.0.1)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66852434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档