本文介绍了如何在pl-sql中解析xml?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字符串,其中包含xml和伪文本,如下所示.

I have a string that contains xml and dummy texts together as follows.

我需要阅读 Hello world 999 的值.

可以帮忙吗?

[GCM] Dummy text1
[GCM] Dummy text2

<PARAMETER_LIST>
  <PARAMETER>
    <NAME>SMS</NAME>
    <VALUE>Hello world</VALUE>
  </PARAMETER>
  <PARAMETER>
    <NAME>ERROR_CODE</NAME>
    <VALUE>999</VALUE>
  </PARAMETER>
</PARAMETER_LIST>

推荐答案

此外,您可能想使用XMLTABLE:

Also, you might wanna use XMLTABLE:

SELECT
  px.*
FROM
  XMLTABLE(
    '/PARAMETER_LIST/PARAMETER' PASSING
      XMLTYPE(
        REGEXP_REPLACE('
              [GCM] Dummy text1
              [GCM] Dummy text2
              <PARAMETER_LIST>
                <PARAMETER>
                  <NAME>SMS</NAME>
                  <VALUE>Hello world</VALUE>
                </PARAMETER>
                <PARAMETER>
                  <NAME>ERROR_CODE</NAME>
                  <VALUE>999</VALUE>
                </PARAMETER>
              </PARAMETER_LIST>'
              ,'^[^<]+'
              ,''
              )
        )
    COLUMNS param_id FOR ORDINALITY
    ,name VARCHAR2(40) PATH 'NAME'
    ,value VARCHAR2(400) PATH 'VALUE'
  ) px;

这将为您提供结果:

  PARAM_ID  |    NAME      |    VALUE
------------------------------------------
   1        |    SMS       |  Hello world
   2        |  ERROR_CODE  |   999

此外,还对Shaun Peterson的解决方案进行了调整(无需切换PLSQL-SQL上下文):

Also, a bit tuned version of Shaun Peterson's solution (without switching PLSQL - SQL context):

declare

MY_STRING VARCHAR2(4000) := '[GCM] DUMMY TEXT1 [GCM] DUMMY TEXT2 <PARAMETER_LIST><PARAMETER><NAME>SMS</NAME><VALUE>Hellow world</VALUE></PARAMETER><PARAMETER><NAME>ERROR_CODE</NAME><VALUE>999</VALUE></PARAMETER></PARAMETER_LIST>';
MY_XML XMLTYPE;

MY_SMS VARCHAR2(100);
MY_ERROR_CODE VARCHAR2(100);

begin

MY_XML := XMLTYPE(SUBSTR(MY_STRING, INSTR(MY_STRING, '<'))) ;
MY_SMS := MY_XML.EXTRACT('/PARAMETER_LIST/PARAMETER[NAME="SMS"]/VALUE/text()').getstringval;
MY_ERROR_CODE := MY_XML.EXTRACT('/PARAMETER_LIST/PARAMETER[NAME="ERROR_CODE"]/VALUE/text()').getstringval;

DBMS_OUTPUT.PUT_LINE('MY_SMS = ' || MY_SMS);
DBMS_OUTPUT.PUT_LINE('MY_ERROR_CODE = ' || MY_ERROR_CODE);

end;

这篇关于如何在pl-sql中解析xml?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 21:44