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 :

Copie d'un xml ou presque..


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut Copie d'un xml ou presque..
    Bonjour,

    je souhaiterais copier un xml vers un autre xml excepté certaines balises...mais je n'y arrive pas

    Voici mon fichier
    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
     
          <GrpHdr> 
    	  <NbOfTxs>3</NbOfTxs> 
    	  <CtrlSum>11500000</CtrlSum> 
    	  <InitgPty>
    	         <Nm>Nom</Nm> 
    		 <PstlAdr>
    		      <StrtNm>Times Square</StrtNm> 
    		      <BldgNb>7</BldgNb> 
    		      <PstCd>NY 10036</PstCd> 
    		      <TwnNm>New York</TwnNm> 
    		      <Ctry>US</Ctry> 
    		   </PstlAdr>
              </InitgPty>
          </GrpHdr>

    Le but de la manip est d'avoir le même fichier sans la balise <Nm>

    Je me bats avec mon fichier xslt depuis un moment : J'arrive à copier le fichier complet ou à copier certains blocs, par exemple <PstlAdr> Mais je n'arrive pas à copier ligne par ligne... a moins qu'il y ait une commande qui filtrerait la copie...(là je rêve un peu je pense)

    Voici mon fichier xslt que j'aimerais rendre correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <!--Generated by SWIFTStandards Workstation (build:R7.1.30.4) on 2012 Jun 07 20:47:19-->
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" encoding="UTF-8" indent="yes" />
    	<xsl:template match="/"> 
    		<xsl:copy select="//GrpHdr"/>
    		<xsl:copy-of select="//PstlAdr">
    			<xsl:apply-templates select="node()"/>
    		</xsl:copy-of>
    	</xsl:template>
    </xsl:stylesheet>

    mais évidemment ça marche pas.....

    Au secours !

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    Bon alors j'ai pas encore trouvé....

    mais j'ai réussi à masquer la donnée

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!--Generated by SWIFTStandards Workstation (build:R7.1.30.4) on 2012 Jun 07 20:47:19-->
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" encoding="UTF-8" indent="yes" />
            <xsl:template match="node() | @*">
    		<xsl:copy>
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="Nm">
    		<xsl:copy>
    			<xsl:text>vvvvvvvvvvvvvvvvvvvvv</xsl:text>
    		</xsl:copy>
    	</xsl:template>
     
    </xsl:stylesheet>

    après si on peut la supprimer du nouveau fichier ça serait mieux...

    merci d'avance

  3. #3
    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
    Ben... Au lieu de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:copy>
      <xsl:text>vvvvvvvvvvvvvvvvvvvvv</xsl:text>
    </xsl:copy>
    ce que tu veux faire, c'est rien.

    Donc, au lieu de mettre ça, tu mets rien. Tu ouvres le template, tu le fermes, et entre les deux il n'y a rien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    C'est bon ça marche !!

    T'as raison c'était tout bête

    Merci encore !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    Par contre,

    sais tu pourquoi, si je rajoute une balise avec un namespace, ça ne marche pas ? En fait ça copie mon fichier mais sans appliquer les suppressions :
    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
     
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.04">
    <CstmrCdtTrfInitn>
       	<GrpHdr>
     		<MsgId>ABC/120928/CCT001</MsgId> 
    		<CreDtTm>2012-09-28T14:07:00</CreDtTm> 
    		<NbOfTxs>3</NbOfTxs> 
    		<CtrlSum>11500000</CtrlSum> 
    		<InitgPty>
    			<Nm>Nom</Nm> 
    			<PstlAdr>
    			    <StrtNm>Times Square</StrtNm> 
    			    <BldgNb>7</BldgNb> 
    			    <PstCd>NY 10036</PstCd> 
    			    <TwnNm>New York</TwnNm> 
    			    <Ctry>US</Ctry> 
    		    </PstlAdr>
              </InitgPty>
      	</GrpHdr>
    </CstmrCdtTrfInitn>
    </Document>
    et pourtant si j'enlève la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.04"
    , de la balise <Document> ça marche...

  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
    Parce que
    - les éléments enfants héritent des namespaces de leurs parents. Donc si tu mets ce xmlns dans <Document>, ancêtre de tous les éléments, alors il s'applique à tous les éléments.

    - le namespace d'un élément fait partie de son nom. On ne doit pas l'ignorer, le négliger, faire comme si c'était pas important. C'est important. Si tu veux l'élement <Nm> du namespace pain, tu ne dois pas demander l'élément <Nm>. Tu dois demander l'élément <Nm> du namespace pain.

    La solution sera d'habitude :

    - de déclarer quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:pain="urn:iso:std:iso:20022:tech:xsd:pain.001.001.04"
    dans la racine de la stylesheet. À la place de pain tu peux mettre zorro ou toto ou ce que tu veux.

    - De remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="Nm">
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="pain:Nm">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    Merci pour ces explications et promis je ne négligerai plus le namespace

    En effet, j'ai appliqué tes modifications et mon xml est correctement traité.

    Mais j'ai une dernière question :

    Comment fais tu pour préciser la balise <Nm> d'un sous groupe, je m'explique:

    Fichier 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
    16
    17
    18
    19
     
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.04">
    <CstmrCdtTrfInitn>
       	<GrpHdr>
     		<MsgId>ABC/120928/CCT001</MsgId> 
    		<CreDtTm>2012-09-28T14:07:00</CreDtTm> 
    		<NbOfTxs>3</NbOfTxs> 
    		<CtrlSum>11500000</CtrlSum> 
    		<InitgPty1>
    			<Nm>Nom</Nm> 
                             <Prenom>prenom</Prenom>   
                    </InitgPty1>
                   <InitgPty2>
    			<Nm>Nom</Nm> 
                             <Prenom>prenom</Prenom>
                  </InitgPty2>
      	</GrpHdr>
    </CstmrCdtTrfInitn>
    </Document>
    Du temps où j'ignorais le namespace () il me suffisait de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template match="InitgPty1/Nm">
    	</xsl:template>
    pour supprimer la balise Nm de InitgPty1

    En ajoutant ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="pain:Nm">
    Toutes les balises Nm sont supprimées ! Ce qui est logique.

    Mais comment faire pour lui dire "supprime moi la balise <Nm> uniquement pour le groupe <InitgPty1>

    J'ai essayé naïvement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="pain:InitgPty1/Nm">
    mais ça ne marche pas

    J'ai vu qu'il y avait des fonctions xslt, faut-il passer par là ?

    Merci d'avance

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    C'est bon, j'ai trouvé (grâce à une de tes interventions dans une discussion d'ailleurs...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template match="pain:InitgPty/pain:Nm">
    	</xsl:template>

    Alors grand merci à toi !!

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

Discussions similaires

  1. [XSLT] Copie d'un XML avec balisage des elements text()
    Par boooob dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 26/11/2010, 15h59
  2. [SAX] Copie de fichier XML
    Par tit_v dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 02/10/2009, 14h03
  3. [XSLT] Copie d'un XML, avec tri
    Par Taz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/04/2007, 13h48
  4. [DOM XML] Copie de fichier XML
    Par AlphonseBrown dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 26/03/2006, 23h11
  5. [xsl] xsl juste pour faire copie d'un xml
    Par peppena dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/02/2004, 16h17

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