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 :

Insertion de caractère dans un nom de mes champs XML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut Insertion de caractère dans un nom de mes champs XML
    Bonjour,

    J'ai un fichier XML construit comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <toto ID="Bonjour-LaLA-LILO">
        <Title>Oui</Title>
      </toto>
    Et je voudrai faire un template en XSLT, qui à chaque fois que je l'appelle, il me mette un "\" devant chaque tiret. En effet, ces tirets ne passent pas dans ma base données que je crée par la suite!!

    Une idée ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Mauvaise solution -_-°. Échapper les tirets avant de les mettre en BDD, c'est le boulot du "truc" qui insère dans la BDD.

    Ce n'est pas XSLT*qui insère des trucs dans la BDD, donc ce n'est pas XSLT*qui doit faire ça.

    Toujours poursuivre les bonnes solutions, jamais les mauvaises.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Voici le site que l'on m'a conseillé !
    http://geekswithblogs.net/Erik/archi...01/120915.aspx

    Pourtant je ne comprend pas trop quand même ..

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je blaguais pas, en fait.

    XSLT n'est pas ce que tu cherches. Fais autrement. Échappe tes tirets d'une autre manière.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    J'exploite mon XSLT et XML après en PHP.
    Vous voulez donc que je le fasse avec ce script ?

    si je pose une question sur un forum, c'est pour qu'on puisse m'aider! Donc si vous ne voulez pas m'aider dites le explicitement, cela fera gagner du temps aux deux.

    Merci.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Ellia Voir le message
    J'exploite mon XSLT et XML après en PHP.
    Vous voulez donc que je le fasse avec ce script ?
    Possiblement. Mais après, ça dépend de pourquoi la BDD n'accepte pas les tirets. Mes bases de données à moi acceptent toujours les tirets. Ton histoire est donc suspecte, et le problème doit sans doute être réglé à un autre niveau.
    Il faudrait que tu nous expliques ce qui ne va pas, au juste, avec les tirets.

    (Note : il ne s'agit pas de quelque chose que je veux. Il s'agit d'utiliser les outils qui sont prévus pour.)

    Citation Envoyé par Ellia Voir le message
    si je pose une question sur un forum, c'est pour qu'on puisse m'aider! Donc si vous ne voulez pas m'aider dites le explicitement, cela fera gagner du temps aux deux.
    *Baîlle*. Et je fais comment pour deviner quels sont les outils que tu utilises, mademoiselle la maligne ?

    Je t'ai dit, très clairement, que XSLT n'était pas l'outil à utiliser, qu'il fallait un autre outil. Les autres outils que tu as à ta disposition, je ne les connais pas.
    Que tu n'aies pas pensé dès le début à les donner, je peux le comprendre. Que tu ne les ai pas donnés dès ton second message, c'est de ta faute, et de ta faute seulement. J'ai été très clair : la solution est autre chose que XSLT. Il fallait donc parler de ce que tu as d'autre que XSLT. Simple, et c'est moi qui te l'ai dit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    @Ellia
    Pour faire ça en xslt, le raisonnement est le suivant:
    [1] Mettez d'abord un template de transformation identitaire puisque la plupart principale on veut la préserver.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="*|@*|text()|comment()|processing-instruction()">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()|comment()|processing-instruction()" />
        </xsl:copy>
    </xsl:template>
    [2] Puis, identifiez les parts dans lesquelles on veut faire effectuer le changement.

    [2.1] Par exemple, si on désire le changement n'appaître que dans les attribut de nom ID, on peut mettre un template dans le xslt document comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="@*[name()='ID']">
        <xsl:attribute name="{name()}">
            <xsl:call-template name="string-replace-all">
                <xsl:with-param name="text" select="." />
                <xsl:with-param name="replace" select="'-'" />
                <xsl:with-param name="by" select="'\-'" />
            </xsl:call-template>
        </xsl:attribute>
    </xsl:template>
    Ici, le template nommé string-replace-all est celui montré dans la page que vous référée. Je veux bien la donner le crédit de convenience mais pas nécessairement d'originalité. C'est un peu lieu comme. Il est Sous-entendu que vous copiez le template et le mettez dans le document xslt aussi.

    Puisque ce template a un match attribut de nature plus spécifique que celui du template identitaire, il va sortir vainqueur et être executé.

    [2.1.1] Si vous entendez le changement d'apparaître dans tous les attributs, il y a une chose à faire de plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="@*" priority="100">
        <xsl:attribute name="{name()}">
            <xsl:call-template name="string-replace-all">
                <xsl:with-param name="text" select="." />
                <xsl:with-param name="replace" select="'-'" />
                <xsl:with-param name="by" select="'\-'" />
            </xsl:call-template>
        </xsl:attribute>
    </xsl:template>
    Voyez, vous mettez un attribut priority de valeur positif quelque peu arbitraire. 100, 1000, 30... tant que vous voulez à condition que vous respectez quelque simple régle à observer dans la compétition de "match": la raison est ce match n'est plus spécifique que celui du template identitaire. (Vous allez rechercher le détail de cet attribut vous-même.)

    [2.2] Si vous désirez le changement appaître dans les textes aussi, par le même raisonnement, vous mettiez un template de ce gens en plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="text()" priority="100">
        <xsl:call-template name="string-replace-all">
            <xsl:with-param name="text" select="." />
            <xsl:with-param name="replace" select="'-'" />
            <xsl:with-param name="by" select="'\-'" />
        </xsl:call-template>
    </xsl:template>
    avec l'attribut priority encore pour la même raison. Remarquez les petites differences par rapport au [2.1.1].

    [2.3] C'est possible de le faire pour les comment() et processing-instruction() aussi mais c'est peu probable vous avez le besoin. En tout cas, écrivez le moins de template et plus spécifique dans le match pour atteindre le but - c'est lier à la performance et à la clarté du travail.

    [3] Vous copiez le template string-replace-all comme dit dans [2.1]

    Voilà.

Discussions similaires

  1. Limite des 218 caractères dans un nom de fichier
    Par Didier Gonard dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2008, 14h28
  2. Changer des caractères dans les noms de fichiers
    Par ForgetTheNorm dans le forum Linux
    Réponses: 2
    Dernier message: 07/01/2008, 14h26
  3. Insertion de caractère dans un JPasswordField
    Par barbiche dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/03/2007, 01h52
  4. insert un caractère dans un fichier text.
    Par toctoc dans le forum Delphi
    Réponses: 5
    Dernier message: 06/07/2006, 08h36
  5. [MFC] Problème d'insertion du caractère ' dans une BD
    Par julien.nasser dans le forum MFC
    Réponses: 5
    Dernier message: 21/04/2006, 09h46

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