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] Suppression d'un contenu d'attribut [Débutant(e)]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Par défaut [XSLT] Suppression d'un contenu d'attribut
    Bonjour à tous,
    j'ai recherché en vain ma solution sur le forum...
    En fait, dans mes fichiers xml qui répondent tous à la même DTD, je gère des unités de mesures ISO et US. A chaque fois que le rédacteur renseigne une unité ISO en attribut il doit le faire sur le US. Donc pour les cas où y a pas d'US, il met NA.
    Ma question est : est-il possible sur xslt de faire en sorte que la valeur NA soit effacée partout où elle apparaisse en sachant qu'elle est dans toute sorte d'attribut définissant des unités (force, Pression, distance, temps, etc. ?
    Comment faire?
    Merci d'avance

  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
    Par défaut
    oui c est largement possible
    avec un template du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="@*[.='NA']>
      <xsl:copy/><!--pour recopier l attribut sans sa valeur-->
    </xsl:template>

  3. #3
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Bonne idée mais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template match="@*[.='NA']>
     </xsl:template>
    bien conçu devrait faire en sorte que même l'attribut ne sera pas recopié, a voir ce qui est le plus interessant dans ce cas

  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
    Par défaut
    oui...enfin on s était compris (vu le commentaire que j ai mis) )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Par défaut
    Merci à tous les deux.
    j'ai essayé les codes mais ça ne m'a pas supprimé les NA dans mon fichier XML de sortie. en fait le code ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Txttable>
    <Non_traduit>
    <Valeur>
    <valeur_avec_unite>
    <dimension>
    <metre Quantite_ISO="2,53" Quantite_US_Foot="NA" Quantite_US_inch="NA"/>
    </dimension>
    </valeur_avec_unite>
    </Valeur>
    </Non_traduit>
    </Txttable>
    Il en existe plusieurs qui sont de différents sortes. Tout ce que je veux c'est qu'à chaque fois supprimer les NA et/ou leurs attributs porteurs.
    Faut-il que je repertorie tous les éléments avec attribut et que je les déclare sur le xslt?
    Merci d'avance

  6. #6
    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
    Bonjour,

    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?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:copy>
    			<xsl:apply-templates select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    	<xsl:template match="@*|text()">
    		<xsl:copy-of select="."/>
    	</xsl:template>
    	<xsl:template match="@*[.='NA']"/>
    </xsl:stylesheet>
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Par défaut
    Un grand merci Grand Father!!
    ça marche! seuement le hic est qu'il entre en conflit avec la gestion de ma table des matières qui a un début de code que voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xsl:template match="*">
    		<xsl:element name="{name()}">
    			<xsl:for-each select="@*">
    				<xsl:attribute name="{name(.)}">
    					<xsl:value-of select="."/>
    				</xsl:attribute>
    			</xsl:for-each>
    		            <xsl:if test=".. = /">
    				<xsl:call-template name="Sommaire"/>
    			</xsl:if>
     
    		          <xsl:apply-templates/>
    		</xsl:element>
    	</xsl:template>
    Du coup quand je l'applique comme tu l'indiques j'ai mes NA supprimés mes ma table des matières disparues. En revanche si j'enlève ta partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="*">
    		<xsl:copy>
    			<xsl:apply-templates select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    j'ai ma table mes les NA sont pas supprimés.
    Nota: je pars d'un fichier xslt que celui que j'ai remplacé a fait!!!

  8. #8
    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 citizen87
    j'ai ma table mes les NA sont pas supprimés.
    C'est normal : si tu fais un for-each au lieu d'un apply-templates, les templates ne sont pas exécutés. D'autre part, je te déconseille fortement le test ".. = /" pour vérifier si l'on se trouve juste sous la racine, du fait que ce test compare entre eux les contenus complets des deux sous-arbres, et vu qu'il est exécuté pour chaque occurrence d'élément... Il vaut mieux le remplacer par le test "not(../..)" bien moins consommateur de ressources.
    Ca devrait donner cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="*">
      <xsl:copy>
        <xsl:apply-templates select="@*">
        <xsl:if test="not(../..)">
          <xsl:call-template name="Sommaire"/>
        </xsl:if>
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="@*|text()">
      <xsl:copy-of select="."/>
    </xsl:template>
    <xsl:template match="@*[.='NA']"/>
    Il y a sans doute d'autres optimisations à faire, mais il faudrait pour cela voir le reste du code.
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Par défaut
    Merci Grand father
    c'est vrai que tu as les astuces de grand mère oups! grand père!
    J'ai l'idée donc je vais pouvoir me débrouiller avec les billes que tu m'as filées.

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

Discussions similaires

  1. [XSLT][excel] Affichage Lien Hypertexte contenu dans Attribut
    Par Graineur dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 03/12/2010, 16h26
  2. [xslt] passer le nom d'un attribut comme param
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/11/2005, 12h03
  3. [XSLT] Afficher une seule fois les attributs redondants...
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/11/2005, 10h52
  4. [XSLT] Suppression des retours charriots
    Par Hoegaarden dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/08/2005, 17h51
  5. [xslt] Suppression des éléments sans contenu.
    Par dibbouk dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/06/2005, 18h17

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