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

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    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
    Quand on n'a pas d'tête, on a ...

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    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"
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    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
    Quand on n'a pas d'tête, on a ...

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    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
    Quand on n'a pas d'tête, on a ...

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    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"
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    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 ?
    Quand on n'a pas d'tête, on a ...

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    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 averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    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"
    Quand on n'a pas d'tête, on a ...

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par ghohm
    Est-ce correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/ROOT/PARAMETERS/PARAMETER[attribute::Name=\'option_3\']/@Value"
    Nan, ça n'est pas correct !

    Le problème est que :
    - avec les quotes ... ça plante ! (normal, les quotes interfèrent avec celles du trigger)
    - sans les quotes ... ça plante ! (normal, par rapport à ce que tu m'as dit)
    - avec les quotes, mais précédées d'anti-slashes ... ça plante ! (normal, c'est contraire à la norme)

    Solution ... utiliser des variables ?
    Quand on n'a pas d'tête, on a ...

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    Citation Envoyé par ghohm

    Solution ... utiliser des variables ?
    que ce qui t'en empeche?
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Citation Envoyé par valal
    que ce qui t'en empeche?
    Je suis obligé d'utiliser cette syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="ma_variable">
          <xsl:value-of select="/ROOT/PARAMETERS/PARAMETER[attribute::Name='option_3']/"/>
    </xsl:variable>
    1) Je ne pense pas que mon fichier DAD supporte des éléments XSLT ... à voir !

    2) Je me retrouve encore une fois avec des quotes !
    Quand on n'a pas d'tête, on a ...

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

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Points : 449
    Points
    449
    Par défaut
    Vous allez pas le croire ... j'ai simplement inversé tous mes guillemets par des quotes et inversement ... et et et ça fonctionne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path='/ROOT/PARAMETERS/PARAMETER[@Name="option_3"]/@Value'
    Longue vie au module XML Extender de DB2 !

    (A part ce petit problème de syntaxe, c'est vraiment géniale ! )


    Merci pour votre aide : valal & GrandFather.

    Gôm
    Quand on n'a pas d'tête, on a ...

+ 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