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 :

Modification de fichier XML avec XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Modification de fichier XML avec XSLT
    Bonjour, j'aimerais vouloir modifier un fichier XML (avec XSLT) contenant des informations sur des périodiques de la manière suivante :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <collection xmlns="http://www.loc.gov/MARC21/slim">
    	<record xmlns="http://www.loc.gov/MARC21/slim">
    		<controlfield tag="001">836687</controlfield>
    		<controlfield tag="003">SzGeCERN</controlfield>
    		<datafield tag="037" ind1="" ind2="">
    			<subfield code="a">hep-ph/0505195</subfield>
    		</datafield>
    		<datafield tag="041" ind1="" ind2="">
    			<subfield code="a">eng</subfield>
    		</datafield>
    		<datafield tag="088" ind1="" ind2="">
    			<subfield code="a">BARI-TH-05-510</subfield>
    		</datafield>
    		<datafield tag="100" ind1="" ind2="">
    			<subfield code="a">Colangelo, P</subfield>
    		</datafield>
    		<datafield tag="245" ind1="" ind2="">
    			<!--
    			<subfield code="a">Radiative transitions of $D^*_{sJ}(2317)$ and $D_{sJ}(2460)$</subfield>
    			-->
    			<subfield code="a">First observation of $\Sigma^-$-${\rm e}^-$ elastic scattering in the hyperon beam experiment WA89 at CERN</subfield>
    		</datafield>
    		<datafield tag="260" ind1="" ind2="">
    			<subfield code="c">2005</subfield>
    		</datafield>
         </record>
         <record xmlns="http://www.loc.gov/MARC21/slim">
    		<controlfield tag="001">836684</controlfield>
    		<controlfield tag="003">SzGeCERN</controlfield>
    		<datafield tag="037" ind1="" ind2="">
    			<subfield code="a">hep-ph/0505192</subfield>
    		</datafield>
    		<datafield tag="041" ind1="" ind2="">
    			<subfield code="a">eng</subfield>
    		</datafield>
    		<datafield tag="088" ind1="" ind2="">
    			<subfield code="a">CERN-PH-TH-2005-083</subfield>
    		</datafield>
    		<datafield tag="100" ind1="" ind2="">
    			<subfield code="a">Seymour, M H</subfield>
    		</datafield>
    		<datafield tag="245" ind1="" ind2="">
    			<subfield code="a">Quantum ChromoDynamics</subfield>
    		</datafield>
    		<datafield tag="260" ind1="" ind2="">
    			<subfield code="c">2005</subfield>
    		</datafield>
    		<datafield tag="269" ind1="" ind2="">
    			<subfield code="c">23 May 2005</subfield>
    		</datafield>
    		<datafield tag="300" ind1="" ind2="">
    			<subfield code="a">49 p</subfield>
    		</datafield>
         </record>
    </collection>
    Les datafield correspondent aux formats MARC donc le tag 245 correspond aux titres du périodique. Alors il faut que je compare ce titre avec les titres contenu dans 2 autres fichiers XML dont la structure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <journals>
    	<journal>
    		<title>Scalar leptoquark pair production at the CERN LHC: signal and backgrounds  </title>
    		<publication> The European Physical Journal C - Particles and Fields  </publication>
    		<publisher>  Springer-Verlag GmbH  </publisher>
    		<issue> Volume 2, Number 3  </issue>
    		<authors>  B. Dion, L. Marleau, G. Simon, et al.  </authors>
    		<pages> 497 - 502  </pages>
    	</journal>
           <journal> ... </journal> <journal> ... </journal>
    </journals>
    A partir de là, s'il y a une correspondance entre un titre du premier fichier XML et l'un des deux autres, il me faut ajouter un tag avec les informations sur la publication dans le premier fichier XML, c'est à dire comme fils du tag <datafield tag="260"> il me faut ajouter ce tag <subfield code="c">
    Avec ici l'information de la publication pris des autres fichiers XML</subfield>

    Mon problème est que je ne sais pas comment ajouter ce tag au bon endroit dans le fichier XML, je ne sais pas si cela est possible avec XSL seulement ou s'il faut avoir recours à DOM, dans la mesure du possible je voudrais le faire seulement avec XSL.
    Pour le moment je n'arrive qu'à sortir la publication toute seule mais je ne sais pas quelle fonction ou quelle structure de template utilisé pour modifier la partie du fichier XML d'origine que j'utlise. ça serait gentil si quelqu'un pourrait m'aider.
    Merci

  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
    Bonjour,

    c'est tout à fait faisable avec XSLT, il s'agit en gros d'une feuille de style de recopie avec un traitement particulier pour le datafield 260. Je te donne le canevas :
    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
    30
    31
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:coll="http://www.loc.gov/MARC21/slim">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="*">
    		<xsl:copy>
    			<xsl:copy-of select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="coll:datafield[@tag = '260']">
    		<xsl:copy>
    			<xsl:copy-of select="@*"/>
    			<xsl:apply-templates/>
    			<xsl:variable name="titre" select="preceding-sibling::coll:datafield[@tag = '245'][1]/coll:subfield[@code = 'a']"/>
    			<xsl:choose>
    				<xsl:when test="document('truc1.xml')/journals/journal[title = $titre]">
    					<subfield code="c">
    						...
    					</subfield>
    				</xsl:when>
    				<xsl:when test="document('truc2.xml')/journals/journal[title = $titre]">
    					<subfield code="c">
    						...
    					</subfield>
    				</xsl:when>
    			</xsl:choose>
    		</xsl:copy>
    	</xsl:template>
    </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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ton aide, je ne savais vraiment pas comment faire ce genre de chose, mais en y regardant c'est assez logique comme traitement.
    Encore Merci.

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

Discussions similaires

  1. Fusion de plusieurs fichiers xml avec xslt
    Par majduuus dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/07/2013, 15h30
  2. [XSLT] Générer des fichiers XML avec PHP
    Par oneTime dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 28/04/2008, 21h27
  3. Diviser un fichier XML en plusieurs fichiers XML avec XSLT
    Par bobkorn dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/04/2008, 12h13
  4. Copie d'un fichier XML avec modification de valeur d'attribut
    Par CocoRambo dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 11/07/2007, 09h21
  5. Réponses: 3
    Dernier message: 24/04/2007, 11h39

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