【问题标题】:Get specific information from XML input using PLSQL使用 PLSQL 从 XML 输入中获取特定信息
【发布时间】:2015-05-15 12:20:03
【问题描述】:

输入 XML

<major>
    <minor>
        <line_id>12345</line_id>
        <service_Line>
            <line_id>1111</line_id>
            <product_id>56789</product_id>
        </service_Line>
        <service_Line>
            <line_id>22222</line_id>
        </service_Line>
        <service_Line>
            <line_id>3333</line_id>
            <product_id>23456</product_id>
            <product_id>999999</product_id>
        </service_Line>
        <service_Line>
            <line_id>4444</line_id>
        </service_Line>
    </minor>
    <service_Line>
        <line_id>5555</line_id>
        <product_id>666666</product_id>
        <product_id>121212</product_id>
    </service_Line>
    <service_Line>
        <line_id>5555</line_id>
    </service_Line>
</major>

来自上述 XML

我想要service_line标签的line_id和Product_id,忽略service_line标签中没有product_id的line_id

所以我需要以下信息

所以我需要以下信息

输出-

服务热线 -- 1111

 Product_id -- 56789

服务热线 -- 3333

 Product_id -23456
 Product_id - 999999

服务热线 -- 5555

   Product_id -666666
   Product_id - 121212`

甲骨文版本: PLSQL 版本 11.2.0.3.0 - 生产

【问题讨论】:

  • 我需要这样的输出
  • 所以我需要以下信息 Service LINE -- 1111 Product_id -- 56789 Service Line -- 3333 Product_id -23456 Product_id - 999999 Service Line -- 5555 Product_id -6​​66666 Product_id - 121212`
  • “在应用程序代码中使用 XPath 或 XML 解析器”是否可行?因为试图在 Oracle 中处理 XML... ew。 =(
  • 嘿... Jpmc,我用谷歌搜索了它,但无法获得此输出.. 请帮助

标签: xml oracle plsql plsqldeveloper


【解决方案1】:

这样的事情可能会对你有所帮助:

WITH xml_table AS (SELECT XMLTYPE(
'<major>
    <minor>
    <line_id>12345</line_id>
    <service_Line>
        <line_id>1111</line_id>
        <product_id>56789</product_id>
    </service_Line>
    <service_Line>
        <line_id>22222</line_id>
    </service_Line>
    <service_Line>
        <line_id>3333</line_id>
        <product_id>23456</product_id>
        <product_id>999999</product_id>
    </service_Line>
    <service_Line>
        <line_id>4444</line_id>
    </service_Line>
</minor>
<service_Line>
    <line_id>5555</line_id>
    <product_id>666666</product_id>
    <product_id>121212</product_id>
</service_Line>
<service_Line>
    <line_id>5555</line_id>
</service_Line>
</major>') xml FROM DUAL)
SELECT EXTRACTVALUE(VALUE(SERVICE_LINE),'/line_id') line_id,  EXTRACTVALUE(VALUE(SERVICE_LINE),'/product_id') product_id
FROM xml_table, TABLE(XMLSEQUENCE(EXTRACT(xml_table.xml,'//service_Line/*'))) service_line

【讨论】:

  • 感谢 Pablo 的询问 :)
【解决方案2】:

你看过函数extractvalue吗?它必须在查询的 select 子句中使用,但您可以通过从对偶中选择轻松解决。

select extractvalue(xml, '/major/minor/service_Line/line_id') into v_value from dual;

请注意,输入的 XML 必须是 XMLtype 类型。您可以使用函数 xmltype(String) 将字符串转换为 XMLtype。

extractvalue 的 Oracle 文档链接:http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions054.htm#SQLRF06173

这不会解决您的全部问题,但我希望它能为您指明正确的方向。

【讨论】:

  • 感谢马特的帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-28
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多