xmlelement read leer generar ejemplos desde createxml crear con archivos xml plsql xml-parsing

read - Cómo analizar el xml en pl-sql?



xmlelement oracle (2)

Tengo una cadena que contiene xml y textos ficticios juntos de la siguiente manera.

Necesito leer el valor Hola mundo y 999 .

¿Me puede ayudar por favor?

[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>


Además, es posible que desee utilizar 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;

Esto te daría el resultado:

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

Además, una versión sintonizada de la solución de Shaun Peterson (sin cambiar el contexto PLSQL - SQL):

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;


Hola, extrae el xml de esta cadena, lo pongo en un tipo xml y luego procedo desde allí. Vea abajo para un ejemplo.

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 SELECT XMLTYPE(SUBSTR(MY_STRING, INSTR(MY_STRING, ''<''))) INTO MY_XML FROM DUAL; SELECT EXTRACTVALUE(MY_XML, ''/PARAMETER_LIST/PARAMETER[NAME="SMS"]/VALUE''), EXTRACTVALUE(MY_XML, ''/PARAMETER_LIST/PARAMETER[NAME="ERROR_CODE"]/VALUE'') INTO MY_SMS, MY_ERROR_CODE FROM DUAL; DBMS_OUTPUT.PUT_LINE(''MY_SMS = '' || MY_SMS); DBMS_OUTPUT.PUT_LINE(''MY_ERROR_CODE = '' || MY_ERROR_CODE); end;

Esto te dará la salida

MY_SMS = Hellow World

MY_ERROR_CODE = 999