Oracle - Leer xml Oracle nodo superior

   
Vista:

Leer xml Oracle nodo superior

Publicado por Gustavo (2 intervenciones) el 04/10/2013 09:52:57
Muy buenas.
Tengo un problema al leer un xml en ORACLE.
Estoy usando una 9i

El xml es de este tipo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IAEMI-KH VERSION="2">
<GRUPO TIPO="VIVIENDAS" KH="0.8664" RATING5A="3.0531" RANGO="B-">
<KHDETALLE KH="0.85" RATING5A="2.93" RANGO="B-" ID="1" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.85" RATING5A="2.91" RANGO="B-" ID="2" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.93" RATING5A="3.78" RANGO="B-" ID="3" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.81" RATING5A="2.41" RANGO="B-" ID="4" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.94" RATING5A="3.96" RANGO="B-" ID="5" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.93" RATING5A="3.86" RANGO="B-" ID="6" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.81" RATING5A="2.35" RANGO="B-" ID="7" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.83" RATING5A="2.61" RANGO="B-" ID="8" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.81" RATING5A="2.4" RANGO="B-" ID="9" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.83" RATING5A="2.55" RANGO="B-" ID="10" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="0.91" RATING5A="3.61" RANGO="B-" ID="11" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
</GRUPO>
<GRUPO TIPO="LOCALES" KH="1.0" RANGO="A">
<KHDETALLE KH="1.0" RANGO="A" ID="1" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="1.0" RANGO="A" ID="2" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
<KHDETALLE KH="1.0" RANGO="A" ID="3" LOCALIZACION="BUENA" CLAVELOCALIZACION="CAT:EPSG:23031" HORIZONTAL="376414.001465211" VERTICAL="4564368.00055727"/>
</GRUPO>
<IAEMIREF REVISION="1">C008-10032609</IAEMIREF>
<TASREF>0051117T07</TASREF>
</IAEMI-KH>

Para leerlo uso la siguiente select

SELECT extractvalue(value(S1),'/GRUPO/@RANGO') "A",
extractvalue(value(S1),'/KHDETALLE@VERTICAL') "B",
extractvalue(value(S1),'/KHDETALLE@HORIZONTAL') "C"--,
FROM table(CAST(xmlsequence(extract(XMLType(Fnc_Obtenerdoc('REC_IN_BSAN', 'C008-10032609.KhR.1.xml.iaemi')) ,'/IAEMI-KH/GRUPO/KHDETALLE' )) AS XMLSequenceType )) s1

Pero no consigo que me saque valores para la columna "A". ¿Cómo se le indica para que suba al nodo padre?

Otras opciones que he intentado es buscar desde '/IAEMI-KH/GRUPO/ pero en ese caso cuando uso
extractvalue(value(S1),'/GRUPO/KHDETALLE/@VERTICAL') me da el error ORA-19025 EXTRACTVALUR devuelve un valor de un solo nodo.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Leer xml Oracle nodo superior

Publicado por Gustavo (2 intervenciones) el 04/10/2013 10:55:57
Hola.
Me respondo a mí mismo.
Al final hemos encontrado una solución al problema

SELECT
extractvalue(value(S1),'/GRUPO/@RANGO'),
extractvalue(value(S2),'/KHDETALLE/@VERTICAL'),
extractvalue(value(S2),'/KHDETALLE/@HORIZONTAL'),
FROM
table(CAST(xmlsequence(extract(XMLType(Fnc_Obtenerdoc('REC_IN_BSAN', 'C008-10032609.KhR.1.xml.iaemi')) ,'/IAEMI-KH/GRUPO' )) AS XMLSequenceType )) s1,
table(CAST(xmlsequence(extract(value(S1) ,'/GRUPO/KHDETALLE' )) AS XMLSequenceType )) s2


Como se puede ver la cuestión es una primera tabla al nivel más superior y otra tabla qhe hace referencia a la anterior, pero ya yendo al nivel inferior.

Espero que le sirva a alguien.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Leer xml Oracle nodo superior

Publicado por xve (13 intervenciones) el 04/10/2013 16:02:28
Gracias por comentarlo Gustavo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Leer xml Oracle nodo superior

Publicado por Alixandro florian_do@yahoo.com (63 intervenciones) el 10/10/2013 22:10:29
Señores copien de de Gustavo, los foros son para compartir, no para solo buscar y cuando encuentran la solución ya se por si mismos o en el foro, no la comparten, ni comentan y muchos ni agradecen. Estamos para ayudar y ser ayudado, compartir experiencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar