IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Utilisation de directives XML


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut Utilisation de directives XML
    Bonjour,
    Sous oracle 10i, je génére un fichier XML en utilisant les directives XML d'Oracle. Dans le fichier de sortie, le résultat de mes requètes sont sur la même ligne (chaque record retrouvé), ce qui n'est pas très lisible : les lignes sont très longues. Y a t'il une possibilité d'avoir un retour de ligne sur chaque find de balise, et l'indentation des blocs imbriqués ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT
    XMLELEMENT("NavigationPointList",
    	XMLELEMENT("NavigationPoint", 
               XMLELEMENT("PointName", geo.POINT_NAME ),
               XMLELEMENT("PointKind", DECODE(geo.NAVAID_TYPE,'DESIGNATED_POINT','DESIGNATED',DECODE(geo.NAVAID_TYPE,'UNKNOWN_POINT','UNKNOWN','NAVAID_'||geo.RADIO_NAVAID_KIND))),
               XMLELEMENT("Position",
    	      XMLELEMENT("Latitude",ROUND((geo.DEG_LATITUDE + geo.MIN_LATITUDE/60.0 + geo.SEC_LATITUDE/3600.0),10)),
    	      XMLELEMENT("Hemisphere",DECODE(geo.HEMISPHERE,'N','NORTH','SOUTH','')),
    	      XMLELEMENT("Longitude",ROUND((geo.DEG_LONGITUDE + geo.MIN_LONGITUDE/60.0 + geo.SEC_LONGITUDE/3600.0),10)),
    	      XMLELEMENT("Direction",DECODE(geo.DIRECTION,'W','WEST','EAST','')),
               XMLELEMENT("MapsUsageAtcCentreList",
                  XMLELEMENT("MapsUsageAtcCentre",
               	XMLELEMENT("AtcCentreName", m.ATC_CENTRE_NAME ),
               	XMLELEMENT("MapsUsage", m.MAPS_USAGE_DESCRIPTOR )
    		))
    	)
       ))
    FROM GEO_PT geo,GRAPHICAL_POINT gp, MAPS_USAGE_TMP m
    WHERE gp.AIRSPACE_ENV_NAME=geo.AIRSPACE_ENV_NAME
    and gp.POINT_NAME#GEO_PT=geo.POINT_NAME and m.NAME=gp.NAME and m.KIND=gp.KIND
    and geo.AIRSPACE_ENV_NAME = 'MAASNEW';
    Résultat produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <NavigationPointList><NavigationPoint><PointName>ABAMI</PointName><PointKind>DESIGNATED</PointKind><Position><Latitude>51.425</Latitude><Hemisphere>NORTH</Hemisphere><Longitude>7.2805555556</Longitude><Direction></Direction><MapsUsageAtcCentreList><MapsUsageAtcCentre><AtcCentreName>MAAS</AtcCentreName><MapsUsage>default:gpt1</MapsUsage></MapsUsageAtcCentre></MapsUsageAtcCentreList></Position></NavigationPoint></NavigationPointList>                                               
    <NavigationPointList><NavigationPoint><PointName>ABAMI</PointName><PointKind>DESIGNATED</PointKind><Position><Latitude>51.425</Latitude><Hemisphere>NORTH</Hemisphere><Longitude>7.2805555556</Longitude><Direction></Direction><MapsUsageAtcCentreList><MapsUsageAtcCentre><AtcCentreName>FEED</AtcCentreName><MapsUsage>feed</MapsUsage></MapsUsageAtcCentre></MapsUsageAtcCentreList></Position></NavigationPoint></NavigationPointList>
    Et ce qui est souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <NavigationPointList>
       <NavigationPoint>
          <PointName>ABAMI</PointName>
          <PointKind>DESIGNATED</PointKind>
          <Position>
             <Latitude>51.425</Latitude>
    	 <Hemisphere>NORTH</Hemisphere>
    	 <Longitude>7.2805555556</Longitude>
    	 <Direction></Direction>
          <MapsUsageAtcCentreList>
    ...
    Merci

  2. #2
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    J'ai bien trouvé la fonction DBMS_XMLGEN, mais elle me rajoute un enrobage dont je ne veux pas car plusieurs requètes sql vont se suivre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DBMS_XMLGEN.getxmltype('
    SELECT 
    XMLELEMENT("NavigationPointList",
    (SELECT XMLAgg(
    	XMLELEMENT("NavigationPoint", 
               XMLELEMENT("PointName", geo.POINT_NAME )))
     FROM GEO_PT geo,GRAPHICAL_POINT gp
     WHERE gp.AIRSPACE_ENV_NAME=geo.AIRSPACE_ENV_NAME
       and gp.POINT_NAME#GEO_PT=geo.POINT_NAME
    )) from dual
    ') from dual;
    Ce qui me donne le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ROWSET>
      <ROW>
        <XMLELEMENT_x0028__x0022_NAVIGATIONPOINTLIST_x0022__x002C__x0028_SELECTXMLAGG_x0028_XMLELEMENT_x0028__x0022_NAVIGATIONPOINT_x0022__x002C_XMLELEMENT_x0028__x0022_POINTNAME_x0022__x002C_GEO.POINT_NAME_x0029__x0029__x0029_FROMGEO_PTGEO_x002C_GRAPHICAL_POINTGPWHEREGP.AIRSPACE_ENV_NAME_x003D_GEO.AIRSPACE_ENV_NAMEANDGP.POINT_NAME_x0023_GEO_PT_x003D_GEO.POINT_NAME_x0029__x0029_>
          <NavigationPointList>
            <NavigationPoint>
              <PointName>ABAMI</PointName>
            </NavigationPoint>
            <NavigationPoint>
              <PointName>ABG</PointName>
            </NavigationPoint>
          </NavigationPointList>
        </XMLELEMENT_x0028__x0022_NAVIGATIONPOINTLIST_x0022__x002C__x0028_SELECTXMLAGG_x0028_XMLELEMENT_x0028__x0022_NAVIGATIONPOINT_x0022__x002C_XMLELEMENT_x0028__x0022_POINTNAME_x0022__x002C_GEO.POINT_NAME_x0029__x0029__x0029_FROMGEO_PTGEO_x002C_GRAPHICAL_POINTGPWHEREGP.AIRSPACE_ENV_NAME_x003D_GEO.AIRSPACE_ENV_NAMEANDGP.POINT_NAME_x0023_GEO_PT_x003D_GEO.POINT_NAME_x0029__x0029_>
      </ROW>
    </ROWSET>
    Je voudrais le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          <NavigationPointList>
            <NavigationPoint>
              <PointName>ABAMI</PointName>
            </NavigationPoint>
            <NavigationPoint>
              <PointName>ABG</PointName>
            </NavigationPoint>
          </NavigationPointList>
    Je ne sais pas non plus comment mettre dans mon ordre select des ' car la fonction XMLGEN prend son argument entre '. Ainsi, si je mets dans ma clause where : WHERE gp.POINT_NAME='TOTO', j'ai évidemment une erreur.
    Merci

  3. #3
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    J'ai trouvé mon bonheur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT XMLPARSE(document XMLSERIALIZE(document(
    SELECT 
    XMLELEMENT("NavigationPointList",
    (SELECT XMLAgg(
    	XMLELEMENT("NavigationPoint", 
               XMLELEMENT("PointName", geo.POINT_NAME )))
     FROM GEO_PT geo,GRAPHICAL_POINT gp
     WHERE gp.AIRSPACE_ENV_NAME=geo.AIRSPACE_ENV_NAME
       and gp.POINT_NAME#GEO_PT=geo.POINT_NAME
    )) from dual
    ))) from dual;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    J'ai utilisé par le passé une combinaison de XMLRoot, getclobval et de substr pour forcer le parsing XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    select substr(xmlroot(XMLType('<NavigationPointList><NavigationPoint><PointName>ABAMI</PointName><PointKind>DESIGNATED</PointKind><Position><Latitude>51.425</Latitude><Hemisphere>NORTH</Hemisphere><Longitude>7.2805555556</Longitude><Direction></Direction><MapsUsageAtcCentreList><MapsUsageAtcCentre><AtcCentreName>MAAS</AtcCentreName><MapsUsage>DEFAULT:gpt1</MapsUsage></MapsUsageAtcCentre></MapsUsageAtcCentreList></Position></NavigationPoint></NavigationPointList>'), version '1.0" encoding="UTF-8').getClobVal(), 40) as tst
      from dual;
     
    <NavigationPointList>
      <NavigationPoint>
        <PointName>ABAMI</PointName>
        <PointKind>DESIGNATED</PointKind>
        <Position>
          <Latitude>51.425</Latitude>
          <Hemisphere>NORTH</Hemisphere>
          <Longitude>7.2805555556</Longitude>
          <Direction/>
          <MapsUsageAtcCentreList>
            <MapsUsageAtcCentre>
              <AtcCentreName>MAAS</AtcCentreName>
              <MapsUsage>DEFAULT:gpt1</MapsUsage>
            </MapsUsageAtcCentre>
          </MapsUsageAtcCentreList>
        </Position>
      </NavigationPoint>
    </NavigationPointList>

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci, c'est bon à savoir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2006, 10h10
  2. Utilisation de context.xml : option path
    Par hugo123 dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 25/09/2006, 09h16
  3. utilisation de fichiers XML
    Par cfrelet dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/05/2006, 18h14
  4. [VB.Net] Comment utiliser du script xml ?
    Par manu49 dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/04/2006, 10h21
  5. Utiliser un fichier XML sur un serveur FTP
    Par ired dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/04/2005, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo