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

XSL/XSLT/XPATH XML Discussion :

[XPath][DB2 XML Extender] Valeur d'un attribut par rapport à un attribut ?


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut [XPath][DB2 XML Extender] Valeur d'un attribut par rapport à un attribut ?
    Bonjour à tous,

    je fais de l'insertion de fichiers XML dans une base DB2/AS400 (i5) et il me faut récupérer la valeur d'un attribut en fonction de la valeur de l'autre attribut d'un même élément ... un exemple vous éclairera !


    Mon fichier XML source (mon_fichier.xml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ROOT>
    	<PARAMETERS>
    		<PARAMETER Name="option_1" Value="123456"/>
    		<PARAMETER Name="option_2" Value="01"/>
    		<PARAMETER Name="option_3" Value="02"/>
    		...
    	</PARAMETERS>
    </ROOT>

    Le fichier XML qui me permet de faire de l'insertion automatique en BDD DB2/AS400 grâce à XML Extender (dad.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
    <?xml version="1.0"?>
    <!-- chemin de la DTD du DAD -->
    <!DOCTYPE PROJET SYSTEM "dad.dtd">
    <DAD>
    	<!-- chemin de la DTD du XML -->
    	<dtdid>ma_dtd.dtd</dtdid>
    	<validation>YES</validation>
    		<Xcolumn>
    			<table name="projet.fic_xml">
    				<column name="opt_1" type="integer" path="/ROOT/PARAMETERS/PARAMETER/@Name='option_1'/@Value" multi_occurrence="NO" />
    				<column name="opt_2" type="integer" path="/ROOT/PARAMETERS/PARAMETER/@Name='option_2'/@Value" multi_occurrence="NO" />
    				<column name="opt_3" type="integer" path="/ROOT/PARAMETERS/PARAMETER/@Name='option_3'/@Value" multi_occurrence="NO" />
    			</table>
    		</Xcolumn>
    </DAD>
    Je crois que l'attribut "path" de mon fichier DAD, qui est un fichier XML, utilise du XPath.


    Donc, cette syntaxe ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER/@Name='option_3'/@Value"
    ... va me permettre de récupérer : 02 ?


    Comme vous l'avez peut-être compris, je ne peux pas tester mes insertions de données sur ma base DB2. C'est pourquoi, je fais appel à vous !


    Merci d'avance.

    Gôm

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    essaye avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[@Name='option_3']/@Value"
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="//PARAMETER[@Name='option_3']/@Value"

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par valal
    essaye avec
    C'est justement ce que je ne peux pas faire !


    Mais, j'ai tout de même réussi à trouver dans la doc IBM que l'attribut "path" de mon fichier DAD était bien en XPath.

    D'après ce que j'ai lu sur le web, je pense donc que tu as raison, aussi bien dans ta 1ère que dans ta 2ème réponse.


    Ne pouvant pas tester dans l'immédiat, je reviendrai d'ici quelques jours pour vous dire si cette incertitude est réellement résolue ou pas.


    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Voilà, je suis de retour !


    J'ai donc corrigé ma requête XPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[@Name='option_3']/@Value"
    Malheureusement, ça ne veut pas fonctionner, car la commande du trigger de ma BDD DB2 qui exécute cette requête (et d'autres) contient des quotes ('), donc les quotes s'annulent entre elles !

    Je les ai purement et simplement supprimées de mes requêtes XPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[@Name=option_3]/@Value"
    Mais ... ça ne fonctionne pas mieux !

    Je pense que le caractère "@" pose également problème !


    Connaîtriez-vous une autre syntaxe pour cette même requête ?

    A moins que ça ne vienne de l'encodage de caractère (UTF-8) poserait problème à DB2 ?!!

    Gôm

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    pour les quotes, essaye si tu peux de mettre 'optionx' dans une variable et de l'utiliser ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[@Name=$NOM_DE_TA_VARIABLE]/@Value"

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par valal
    pour les quotes, essaye si tu peux de mettre 'optionx' dans une variable et de l'utiliser ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[@Name=$NOM_DE_TA_VARIABLE]/@Value"
    Merci, mais après vérifications, la suppression des quotes ne pose aucun problème. Je laisse donc la requête XPath telle quelle.

    Par contre, il me faudrait trouver une technique pour remplacer le "@" !? Apparemment, c'est lui et uniquement lui qui pose problème (les crochets n'en sont donc plus un).

    Une idée ?

  7. #7
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par ghohm
    Je les ai purement et simplement supprimées de mes requêtes XPath
    Si tu supprimes les quotes, cela change complètement le sens de l'expression. Ecrite ainsi, tu ne testes plus si l'attribut Name de PARAMETRE est égal à la chaîne littérale 'option_3', mais si l'attribut Name de PARAMETRE est égal à un élément fils de PARAMETRE nommé option_3, ce qui est évidemment érroné.

    @ est le raccourci fréquemment utilisé pour désigner l'axe XPath attribute ; tu peux donc utiliser attribute::Name à la place de @Name.

    Mais je ne pense pas que ce soit les quotes et @ qui posent problème, mais plutôt l'implémentation de XPath faite par DB2, qui doit être incomplète ou non conforme à la norme. Que dit la doc ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par GrandFather
    Si tu supprimes les quotes, cela change complètement le sens de l'expression. Ecrite ainsi, tu ne testes plus si l'attribut Name de PARAMETRE est égal à la chaîne littérale 'option_3', mais si l'attribut Name de PARAMETRE est égal à un élément fils de PARAMETRE nommé option_3, ce qui est évidemment érroné.

    @ est le raccourci fréquemment utilisé pour désigner l'axe XPath attribute ; tu peux donc utiliser attribute::Name à la place de @Name.

    Mais je ne pense pas que ce soit les quotes et @ qui posent problème, mais plutôt l'implémentation de XPath faite par DB2, qui doit être incomplète ou non conforme à la norme. Que dit la doc ?
    Merci beaucoup pour ta réponse, je ne savais pas réellement la signification des quotes !

    Mon problème est que mon fichier DAD, qui n'est rien d'autre qu'un fichier XML, est exécuté au sein d'un trigger. La ligne permettant l'exécution est encadrée par des quotes ... donc elles s'annulent !

    Est-il syntaxiquement correcte d'ajouter des anti-slashes devant les quotes qui me gênent, sachant que je ne peux pas modifier le trigger : géré par DB2 ?

    Est-ce correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[attribute::Name=\'option_3\']/@Value"

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

Discussions similaires

  1. Récuperer valeur noeud xml par rapport à l'attribut
    Par chris52 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/12/2014, 08h57
  2. Insertion valeur dans un champ par rapport à d'autres
    Par crosse9 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/12/2007, 16h05
  3. afficher la valeur d un champ par rapport a un dblook?
    Par neuneu1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/04/2007, 13h12
  4. Réponses: 1
    Dernier message: 02/04/2007, 12h37

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