Oracle - Leer xml Oracle nodo superior

 
Vista:
sin imagen de perfil

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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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

1
2
3
4
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
sin imagen de perfil

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

1
2
3
4
5
6
7
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 (18 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 marcelo (1 intervención) el 07/06/2020 00:07:55
Hola.

No se como resolver esto.
me sale el error ORA-19025

por tener dos veces el Application/SubApplList/Application/Data/Address/PhoneList/Phone/PhoneNumber
------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
SELECT
 extractvalue(x.column_value,'Application/Data/Client/ClientType')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/RegNumber')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/RegNumberDetails')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/ShortName')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/FirstName')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/LastName')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/Citizenship')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/MaritalStatus')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/BirthDate')
,extractvalue(x.column_value,'Application/Data/Client/ClientInfo/Gender')
,extractvalue(x.column_value,'Application/SubApplList/Application/Data/Address/PhoneList/Phone/PhoneNumber')
,extractvalue(x.column_value,'Application/SubApplList/Application/Data/Address/PhoneList/Phone/PhoneNumber')
        FROM TABLE(xmlsequence(EXTRACT( (
        SELECT xmltype('<?xml version="1.0" encoding="UTF-8"?>
<ApplicationFile> 																																	<!-- ROOT ELEMENT -->
	<FileHeader>
		<FormatVersion>2.0</FormatVersion>          																				<!-- Valor Fijo 2.0 -->
		<Sender>0002</Sender>
		<CreationDate>2017-03-13</CreationDate>     																				<!-- [header/Fecha de proceso Formato YYYY-MM-DD]-->
		<CreationTime>10:47:00</CreationTime> 																							<!-- [header/hora de proceso Formato HH24:MI:SS]-->
		<Number>00001</Number>   																														<!-- Secuencia de nombre de archivo XML, _00001 -->
		<Institution>0002</Institution>
	</FileHeader>
	<ApplicationsList>
		<Application> 																																	<!-- INICIO BODY APPLICATION ROOT -->
			<RegNumber>DEMs20170313000201100001001</RegNumber>
			<OrderDprt>0020001</OrderDprt>
			<ObjectType>Client</ObjectType>                     															<!-- Valor Fijo "Client"-->
			<ActionType>AddOrUpdate</ActionType>                															<!-- Valor Fijo "AddOrUpdate"-->
			<ObjectFor>
				<ClientIDT>
					<ClientType>PR</ClientType>  																									<!-- Valor Fijo "PR"-->
					<ClientInfo>
						<RegNumberType>CI</RegNumberType>
						<RegNumber>621241141</RegNumber>
						<ShortName>EEEEEEE;</ShortName>
					</ClientInfo>
				</ClientIDT>
			</ObjectFor>
			<Data>
				<Client>
					<ClientType>PR</ClientType>
					<ClientInfo>
						<RegNumberType>CI</RegNumberType>
						<RegNumber>621241141</RegNumber>
						<RegNumberDetails>234567890</RegNumberDetails>
						<ShortName>Mayte Rodriguez</ShortName>
						<FirstName>Mayte</FirstName>
						<LastName>Rodriguez Arregui</LastName>
						<Citizenship>CHL</Citizenship>
						<MaritalStatus>M</MaritalStatus>
						<BirthDate>1984-02-05</BirthDate>
						<Gender>Female</Gender>
					</ClientInfo>
					<AddInfo>
          	<Add_Date_01>201701</Add_Date_01>
          </AddInfo>
				</Client>
			</Data>
			<SubApplList>
				<Application>
					<RegNumber>DEMs20170313000201100001002</RegNumber>
					<OrderDprt>0020001</OrderDprt>
					<ObjectType>ClientAddress</ObjectType>
					<ActionType>AddOrUpdate</ActionType>
					<Data>
						<Address>
							<AddressType>HM_ADDR</AddressType>
							<PhoneList>
								<Phone>
									<PhoneType>Home</PhoneType>
									<PhoneNumber>+56224569874</PhoneNumber>
								</Phone>
								<Phone>
									<PhoneType>Mobile</PhoneType>
									<PhoneNumber>+5699833333333</PhoneNumber>
								</Phone>
							</PhoneList>
							<State>13</State>
							<City>Santiago</City>
							<AddressLine1>Consistorial 8311</AddressLine1>
							<AddressLine2>Peñalolen</AddressLine2>
						</Address>
					</Data>
				</Application>
 </SubApplList>
 	</Application>
	</ApplicationsList>
</ApplicationFile>') as clob_data
        FROM DUAL
        ),'ApplicationFile/ApplicationsList/Application' ) ) ) x
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
sin imagen de perfil

Leer xml Oracle nodo superior

Publicado por Alixandro (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