使用 PLSQL 从 XML 输入中获取特定信息

Get specific information from XML input using PLSQL

输入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标签中没有[=的line_id 46=]

所以我需要以下信息

所以我需要以下信息

输出-

服务热线 -- 1111

 Product_id -- 56789

服务热线 -- 3333

 Product_id -23456
 Product_id - 999999

服务热线 -- 5555

   Product_id -666666
   Product_id - 121212`

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

你看过函数extractvalue了吗?它必须在查询的 select 子句中使用,但您可以通过 selecting from dual.

轻松解决该问题
select extractvalue(xml, '/major/minor/service_Line/line_id') into v_value from dual;

请注意输入XML必须是XML类型。您可以使用函数 xmltype(String).

将字符串转换为 XMLtype

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

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

类似的内容可能会对您有所帮助:

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