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 :

[XSLT]Insérer un espace entre deux balises


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut [XSLT]Insérer un espace entre deux balises
    Bonjour,

    Voila j'aimerais dans ce xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <tabMuster>
    <Modele fldID="162" lang="1" ID="86" R1="0" R2="0" R3="1" R4="0" R5="0" R6="0" R7="0" R8="0" R9="0" R10="0" R11="0" R12="0" R13="0" R14="0" R15="0" R16="0" R17="0" R18="0" R19="0" R20="0" G1="1" G2="1" G3="1" G4="0" G5="0" G6="0" G7="1" G8="1" G9="1" G10="0" G11="0" G12="0" G13="0" G14="0" G15="0" G16="0" G17="0" G18="0" G19="0" G20="0" Flags="00000000000000000000" Def="0">
        <Des>Vorzugsaktien</Des>
        <Muster>
          <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b>
          <b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien zu CHF*<b title="ein Betrag" style="" id="B" xmlns="http://www.w3.org/1999/xhtml">^</b> (Vorzugsaktien) und <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b><b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien zu CHF <b title="ein Betrag" style="" id="B" xmlns="http://www.w3.org/1999/xhtml">^</b></Muster>
        <Text>^^aktien zu CHF*^ (Vorzugsaktien) und ^^aktien zu CHF*^</Text>
      </Modele>
    ...
    ...
    ...
    </tabMuster>
    a l'aide d'une transformation XSLT est-il possible d'insérer des espaces entre les balises (b contenu dans l'élément Muster ) seulement pour celle qui se touche?

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    und <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b><b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien
    doit devenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    und <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b> <b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien
    Pour info: l'élément Modele ce répète dans tabMuster.

    Qu'en pensez vous? Es-ce réalisable?

    Merci

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  2. #2
    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
    Salut,

    en insérant un <xsl:text> </xsl:text> au bon endroit, ça devrait le faire...
    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

  3. #3
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,
    Citation Envoyé par GrandFather
    Salut,

    en insérant un <xsl:text> </xsl:text> au bon endroit, ça devrait le faire...
    Merci pour ta réponse.

    Oui ca j'avais bien pensé , mais tout mon problème est de savoir comment détecter que deux balises se suivent sans aucun caractère entre?

    Une idée?

    Merci
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  4. #4
    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
    Comment as-tu ecrit les templates qui traitent les éléments <b> ?
    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

  5. #5
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    En faite il s'agit d'un résultat d'une transformation XSLT et là j'aimerais écrire une XSLT qui me fasse seulement ca dans un premier temps(car je doit vite trouver une solution).et dans un 2ème temps, Je verrais si je peux mixer les deux mais je pense que ca va pas être possible...

    Si tu veux te faire une idée voici le topo:
    ce Modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Modele fldID="162">
        <Des>Vorzugsaktien</Des>
        <Muster>
          <N Des="ein Anzahl" /><T Des="ein Text" />aktien zu CHF*<B Des="ein Betrag" /> (Vorzugsaktien) und <N Des="ein Anzahl" /><T Des="ein Text" />aktien zu CHF*<B Des="ein Betrag" /></Muster>
        <Text>^^aktien zu CHF*^ (Vorzugsaktien) und ^^aktien zu CHF*^</Text>
      </Modele>
    devient ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Modele fldID="162">
        <Des>Vorzugsaktien</Des>
        <Muster>
          <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b><b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien zu CHF*<b title="ein Betrag" style="" id="B" xmlns="http://www.w3.org/1999/xhtml">^</b> (Vorzugsaktien) und <b title="ein Anzahl" style="" id="N" xmlns="http://www.w3.org/1999/xhtml">^</b><b title="ein Text" style="" id="T" xmlns="http://www.w3.org/1999/xhtml">^</b>aktien zu CHF*<b title="ein Betrag" style="" id="B" xmlns="http://www.w3.org/1999/xhtml">^</b></Muster>
        <Text>^^aktien zu CHF*^ (Vorzugsaktien) und ^^aktien zu CHF*^</Text>
      </Modele>
    a l'aide de ce XSLT:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    		<xsl:template match="/">
    		<xsl:apply-templates/>
    	</xsl:template>
    	<xsl:template match="*">
    		<xsl:element name="{local-name()}">
    			<xsl:apply-templates select="@*|node()"/>
    		</xsl:element>
    	</xsl:template>
    	<xsl:template match="@*">
    		<xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
    	</xsl:template>
    <xsl:template match="B">
    <xsl:variable name="nom" select="@id"/>
    <xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">B</xsl:attribute>^</xsl:element>
    </xsl:template>
    <xsl:template match="N">
    <xsl:variable name="nom" select="@id"/>
    <xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">N</xsl:attribute>^</xsl:element>
    </xsl:template>
    <xsl:template match="D">
    <xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">D</xsl:attribute>^</xsl:element>
    </xsl:template>
    <xsl:template match="T">
    <xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name="title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/><xsl:attribute name="id">T</xsl:attribute>^</xsl:element>
    </xsl:template>
    </xsl:stylesheet>
    Voila maintenant tu sais tous.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  6. #6
    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
    Tu as beaucoup de redondance de code... Tu peux fusionner tes 4 derniers templates en un seul, et en profiter pour faire une jolie indentation :
    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
    <xsl:template match="B|N|D|T">
    	<xsl:variable name="name" select="name()"/>
    	<xsl:if test="preceding-sibling::node()[1][name() = 'B' or name() = 'N' or name() = 'D' or name() = 'T']">
    		<xsl:text> </xsl:text>
    	</xsl:if>
    	<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml">
    		<xsl:attribute name="title">
    			<xsl:value-of select="@Des"/>
    		</xsl:attribute><xsl:attribute name="style"/>
    		<xsl:attribute name="id">
    			<xsl:value-of select="name()"/>
    		</xsl:attribute>
    		<xsl:text>^</xsl:text>
    	</xsl:element>
    </xsl:template>
    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

  7. #7
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Chapeau bas...

    Je pensais que mon XSLT étais bon mais non j'avais oublié une simplification!

    Merci pour ces deux coups de pouce GrandFather!



    Thierry

    P.S. finalement, <xsl:text> </xsl:text> ne marche pas mais c'est bon avec ton super code je vais réussir à trouver quelquechose qui marche avec Infopath ."Pourquoi faire simple quand on peux faire compliquer" tel devrait être la devise de Microsoft même s'il veulent nous faire croire le contraire.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  8. #8
    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
    Qu'est-ce que tu veux dire par "<xsl:text> ne fonctionne pas" ? La balise n'est pas reconnue ?
    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

  9. #9
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Si il est reconnu mais après quand j'essaye de l'introduire dans mon champs infopath il me le mange (il est plus là).

    Mais t'en fait pas je vais bien trouver une solution et je la posterai.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  10. #10
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    J'ai toujours pas la solution mais je sais d'ou sa viens et ca ne viens pas d'infopath j'ai parlé trop vite mais ca viens du webservice que j'utilise pour faire la transformation...

    Va falloir que je cherche le pourquoi du comment...

    si quelqu'un à envie de s'y frotter j'ai posté le problème ici.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/11/2010, 09h45
  2. Insérer automatiquement un espace entre deux chiffres
    Par mosta2010 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/06/2008, 08h03
  3. réduire espace entre deux balises CSS
    Par damienbx dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 27/01/2008, 13h07
  4. Récupérer du texte d'un fichier xml entre deux balises
    Par manutudescends dans le forum Format d'échange (XML, JSON...)
    Réponses: 24
    Dernier message: 30/11/2005, 18h29
  5. comment faire des espaces entre deux liens ???
    Par baaps dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/03/2005, 09h53

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