2 Replies Latest reply: Jun 27, 2013 9:51 AM by 4d0fda02-99f2-4e37-b779-501b0dc19f04 RSS

    XMLSequence EXTRACT HEAD and DETAIL in ORACLE 9.2

    4d0fda02-99f2-4e37-b779-501b0dc19f04

      Hi, sorry about my english i am from argentine.

      I have this XML:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

      <arrayOfServicio >

          <Servicio>

              <Nombre>Autenticacion</Nombre>

              <Descripcion>ws</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>RequestTicket</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>Consultas</Nombre>

              <Descripcion>wsConsultas</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>GetVigencia</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

                  <Metodo>

                      <Nombre>GetSiniestralidad</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

                  <Metodo>

                      <Nombre>GetAgrupados</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

                  <Metodo>

                      <Nombre>GetSiniestralidadPorCuil</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>Referencias</Nombre>

              <Descripcion>wsReferencias</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>TablaReferencia</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

                  <Metodo>

                      <Nombre>ListadoReferencia</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>General</Nombre>

              <Descripcion>WsGeneral</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>GetServicios</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>eServicios</Nombre>

              <Descripcion>wseServicios</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>SetComunicacion</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>VentanillaART</Nombre>

              <Descripcion>wsVentanillaART</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>ObtenerNovedades</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

          <Servicio>

              <Nombre>Establecimientos</Nombre>

              <Descripcion>wsEstablecimiento</Descripcion>

              <Activo>true</Activo>

              <Version>1.0</Version>

              <MetodosEntity>

                  <Metodo>

                      <Nombre>GetConsultaPorCuit</Nombre>

                      <Activo>true</Activo>

                      <Version>1.0</Version>

                  </Metodo>

              </MetodosEntity>

          </Servicio>

      </arrayOfServicio>

       

      I am working in ORACLE 9.2 and i wrote this query but the result is not correct, i need to join HEAD and DETAIL in some way but cannot do that...

       

        select extractvalue(value(head),'//Servicio/Nombre/text()') ,

              extractvalue(value(head),'//Servicio/Descripcion/text()'),

              extractvalue(value(head),'//Servicio/Activo/text()'),

              extractvalue(value(head),'//Servicio/Version/text()')

              ,extractvalue(value(detail),'//Metodo/Nombre/text()')

              ,extractvalue(value(detail),'//Metodo/Activo/text()')

              ,extractvalue(value(detail),'//Metodo/Version/text()')

        from arwt_ws_return x

            , table(xmlsequence(extract (x.x_xmldoc, '/arrayOfServicio/Servicio'))) head

            , table(xmlsequence(extract (x.x_xmldoc, '/arrayOfServicio/Servicio/MetodosEntity/Metodo'))) detail;

       

      Ii really appreciate your help.

      Thanks!

        • 1. Re: XMLSequence EXTRACT HEAD and DETAIL in ORACLE 9.2
          odie_63

          Hi,

           

          You can do that by passing the head element to the second XMLSequence. That way you maintain the correlation between the parent and its children :

           

          select extractvalue(value(head), '/Servicio/Nombre') as srv_nombre

               , extractvalue(value(head), '/Servicio/Descripcion') as srv_desc

               , extractvalue(value(head), '/Servicio/Activo') as srv_activo

               , extractvalue(value(head), '/Servicio/Version') as srv_version

               , extractvalue(value(detail), '/Metodo/Nombre') as met_nombre

               , extractvalue(value(detail), '/Metodo/Activo') as met_activo

               , extractvalue(value(detail), '/Metodo/Version') as met_version

          from arwt_ws_return x

             , table(xmlsequence(extract(x.x_xmldoc, '/arrayOfServicio/Servicio'))) head

             , table(xmlsequence(extract(value(head), '/Servicio/MetodosEntity/Metodo'))) detail

          ;

           

          Please also note that :

          - you don't need a descendant axis (//) if you know the exact path

          - you don't need to go down to the text() node if you're using extractvalue

           

          Hope that helps.