license - PLSQL valor de lectura de XML?
pl sql developer tnsnames (2)
Tengo una cadena con código XML, quiero extraer un valor de PL / SQL a una variable.
El XML es muy simple y no será diferente a esto:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SOAProxyResponse xmlns="http://tempuri.org/">
<SOAProxyResult>
There is 23142 Files!
</SOAProxyResult>
</SOAProxyResponse>
</s:Body>
</s:Envelope
Cómo puedo obtener el valor "¡ Hay 23142 archivos! " En el ejemplo anterior en una variable?
Hubo un buen artículo en la revista Oracle hace un tiempo, que puede ayudarlo a:
http://www.oracle.com/oramag/oracle/01-jul/o41xml.html
Otra cosa que utilizamos con bastante frecuencia aquí es la API XMLType, pero, por supuesto, depende de cómo esté almacenando / manteniendo sus datos XML:
http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96616/arxml24.htm
Puede usar la función EXTRACTVALUE
para obtener este valor. Esta función toma dos o tres parámetros:
- un objeto XMLTYPE que contiene un documento XML.
- una expresión XPath que identifica en qué lugar del XML está el valor que queremos.
- (opcional) una cadena adicional que vincula prefijos de espacio de nombres a URI.
En la siguiente consulta, tomé el XML que presentó arriba como una cadena y he creado un objeto XMLTYPE a partir de él. Luego uso EXTRACTVALUE
para obtener el valor que solicitó:
SELECT EXTRACTVALUE(XMLTYPE(
''<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SOAProxyResponse xmlns="http://tempuri.org/">
<SOAProxyResult>
There is 23142 Files!
</SOAProxyResult>
</SOAProxyResponse>
</s:Body>
</s:Envelope>''), ''//SOAProxyResult'', ''xmlns="http://tempuri.org/"'') AS result
FROM dual;
La expresión XPath //SOAProxyResult
simplemente devuelve todos los elementos SOAProxyResult
en el documento. El tercer argumento para EXTRACTVALUE
vincula el espacio de nombres predeterminado a http://tempuri.org/
. Esto es necesario porque el elemento SOAProxyResult
en su documento XML se encuentra dentro de este espacio de nombres.
Si ejecuto esta consulta, obtengo el siguiente resultado:
RESULT -------------------------------------------------------------------------------- There is 23142 Files!
A partir de aquí, debería ser una modificación trivial para poner el resultado de esta consulta en una variable.