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 :

[XSL] Si on trouve pas le template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [XSL] Si on trouve pas le template
    Bonjour,

    J'ai à ma disposition un fichier XML. Grâce à XSL, je vais le parser pour transformer ce fichier en une chaine SQL qui me permettra d'insérer les valeurs dans une base.

    Ainsi
    <commande>
    <num>123</num>
    <client>
    <nom>toto</nom>
    </client>
    <fourn>
    <nom>tata</nom>
    </fourn>
    </commande>

    va se transformer en gros en cette requete
    insert into commande values(123,toto,tata);

    Mon soucis est que si il n'y a pas de fournisseur pour cette commande, le fichier que je recois est :
    <commande>
    <num>123</num>
    <client>
    <nom>toto</nom>
    </client>
    </commande>
    donc le meme mais sans le template fournisseur.

    Du coup ma requete est incomplète car il manque un champ.

    Donc ma question est : Comment puis-je faire pour dire que si je ne trouve pas le template fournisseur, je fait un <xsl:text>' ',</xsl:text>.

    Ainsi, ma requete sera complete avec une valeur ' '.

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    pour un template se sera compliqué,
    par compte si tu te limites à faire une construction de requête dans un template match="commande" ça me semble assez simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	<xsl:template match="commande">
    		INSERTO INTO COMMANDE VALUES (<xsl:value-of select="num"/>,'<xsl:value-of select="client/nom"/>','<xsl:value-of select="fourn/nom"/>');
    	</xsl:template>
    ça devrait passer sasn problème

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    tout d'abord merci pour ta réponse.

    C'était un exemple rapide...

    En fait je fait un <xsl:apply-templates select="Z1TRP"/>
    et à la suite

    <xsl:template match="Z1TRP">
    '<xsl:value-of select="ZNAME1"/>',
    '<xsl:value-of select="ZSTRAS"/>',
    '<xsl:value-of select="ZORT01"/>',
    '<xsl:value-of select="ZPSTLZ"/>',
    '<xsl:value-of select="ZLAND"/>',
    </xsl:template>

    Ce template Z1TRP est contenu dans un autre template.
    J'aimerais tester l'existance de ce template...

    Je n'arrive vraiment pas à trouver de solution

    J'aimerais faire en pseudo code
    si je trouve template Z1TRP alors
    <xsl:apply-templates select="Z1TRP"/>
    sinon
    <xsl:text>' ',' ',' ',' ',</xls:text>
    fin si

    En fait je travaille sur une interface de commande entre l'ERP SAP et notre propre logiciel de gestion des expéditions. Mon fichier XML et XSL est vraiment très complexe et je ne bute plus que sur ce soucis.

    Mon chef de projet me dit : tu trouveras... Je suis dans le caca :'(

    Aidez moi svp

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je pense que tu fais l amalgame entre template du xsl et structure d un xml.
    Si tu veux savoir si dans ton xml il y a l'enfant "Z1TRP"
    il suffit d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="Z1TRP"></xsl:if>
    si tu veux tester avec un "else" se sera plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:choose>
      <xsl:when test="Z1TRP"></xsl:when>
      <xsl:otherwise></xsl:otherwise>
    </xsl:choose>
    si tu veux tester si tu as un bien un template sorrespondant a un enfant Z1TRP...alors il faut parser ton XSL avec un autre XSL....

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je crois peut-etre avoir saisi.

    Dans mon XSL, je suis en train de parcourir le template "template1" de mon XML.(via un <xsl:template match="template1">
    Je cherche à savoir (via mon XSL) si "template1" contient un fils appelé "template1.1" (dans mon XML)

    Donc si j'ai compris je fait
    <xsl:template match="template1">
    <xsl:choose>
    <xsl:when test="template1.1"><xsl:apply-templates select="template1.1"/>
    </xsl:when>
    <xsl:otherwise><xsl:text>'','',''</xsl:text></xsl:otherwise>
    </xsl:choose>
    </xsl:template>

    C'est la premiere fois que je manipule XML et XSL alors je m'excuse pour mon manque de discernement. Merci pour l'aide apportée elle m'est précieuse !

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    oui à un détail prêt
    Dans mon XSL, je suis en train de parcourir le template "template1" de mon XML.(via un <xsl:template match="template1">
    pas le template1 de mon xml mais de mon XSL.
    et effectivement dans ton XSL quand on ecrit <xsl:template match="template1.1"/>
    alors les elements du XML s'appelant ainsi seront "attrapés" par le template correspondant...
    voila voila à peu près le délire

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci bien,

    Je vais essayer de tester !

    Je vous tiendrais au courant !

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [resolu]
    Un très très grand merci a toi. Ca fonctionne !

    Voici un exemple :

    <xsl:template match="E1EDL20">
    <xsl:apply-templates select="E1EDL21"/>
    <xsl:apply-templates select="E1ADRM1"/>
    <xsl:apply-templates select="E1EDT13"/>
    <xsl:choose>
    <xsl:when test="Z1TRP">"><xsl:apply-templates select="Z1TRP"/>
    </xsl:when>
    <xsl:otherwise><xsl:text>'','','','','',</xsl:text></xsl:otherwise>
    </xsl:choose>
    '<xsl:value-of select="VSBED"/>',
    </xsl:template>

    Donc je teste si E1EDL20 contient un template fils. Si c'est le cas je vais lire les valeurs qui sont à l'intérieur. Sinon, remplace ses 5 attributs par des cotes vides.

    Vraiment merci !!


    Ce post est résolu

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

Discussions similaires

  1. [jonas]eclipse ne trouve pas le plugin
    Par Stessy dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 17/07/2007, 11h43
  2. Le compilateur ne trouve pas glut32.dll
    Par Vathal dans le forum GLUT
    Réponses: 3
    Dernier message: 26/01/2004, 12h34
  3. je ne trouve pas la bonne syntaxe
    Par poelvo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2003, 01h30
  4. [TP]trouve pas le graph.tpu
    Par kaygee dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/06/2003, 12h49
  5. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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