Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
495 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  remplacer un noeud XSL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

remplacer un noeud XSL

n°1005383
llasserre
Posté le 08-03-2005 à 16:03:47  profilanswer
 

Bonjour à tous,
Je cherche à modifier une transformation XSL, par une autre transformation XSL dans le but précis de modifier un noeud particulier.
 
Je souhaite en fait remplacer un <xsl:value-of select="."/> par un <xsl:copy-of select=".//*"/>
 
le problème c'est que je n'arrive pas à atteindre correctement mon xsl:value-of.
 
Voila la partie de mon XSL que je veux modifier :  

 <xsl:template match="/ns0:root/ns0:image">
    <ns0:image>
      <xsl:for-each select="@ns0:*|@*[namespace-uri()='']">
        <xsl:attribute name="{name()}" namespace="{namespace-uri()}">
          <xsl:value-of select="." />
        </xsl:attribute>
      </xsl:for-each>
      <w:p>
        <w:pPr>
          <w:ind w:hanging="1080" />
        </w:pPr>
        <w:r>
          <w:t>
            <xsl:value-of select="." />
          </w:t>
        </w:r>
      </w:p>
    </ns0:image>
  </xsl:template>


 
et la partie de mon xsl qui devrait le modifier qui ne marche pas:

<xsll:template match="//ns0:image//xsl:value-of/@select">
  LL
 </xsll:template>


 
alors que  

<xsll:template match="//ns0:image//@select">
  LL
 </xsll:template>


me remplace bien la valeur par LL
 
 
Ma question est :
comment puis je transformer mes 2 <xsl:value-of select="." />
par mon <xsl:copy-of select=".//*"/> ?
 
Merci d'avance


Message édité par llasserre le 08-03-2005 à 22:27:39
mood
Publicité
Posté le 08-03-2005 à 16:03:47  profilanswer
 

n°1006116
benou
Posté le 08-03-2005 à 22:28:44  profilanswer
 

le prochain coup utilise les balises [ fixed] ... [ /fixed] (sans les espaces) pour entourer ton code, parce qu'avec des smiley à la place du texte c'est illisible (là je l'ai fait à ta place)


Message édité par benou le 08-03-2005 à 22:29:28
n°1006265
benou
Posté le 09-03-2005 à 00:49:24  profilanswer
 

chez moi, match="//ns0:image//xsl:value-of/@select" ca fonctionne :
 
XML


<?xml version="1.0" encoding="UTF-8"?>
 <xsl:template match="/ns0:root/ns0:image" xmlns:ns0="toto" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <ns0:image>  
      <xsl:for-each select="@ns0:*|@*[namespace-uri()='']">  
        <xsl:attribute name="{name()}" namespace="{namespace-uri()}">  
          <xsl:value-of select="." />  
        </xsl:attribute>  
      </xsl:for-each>  
    </ns0:image>  
 </xsl:template>


 
XSL


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="toto">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 
 <xsl:template match="*">
  <xsl:element name="{name()}">
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates/>
  </xsl:element>
 </xsl:template>
 
 <xsl:template match="//ns0:image//xsl:value-of/@select">
  <xsl:attribute name="{name()}">LL</xsl:attribute>
 </xsl:template>
 
 <xsl:template match="@*">
  <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:template>
</xsl:stylesheet>


 
OUT


<?xml version="1.0" encoding="UTF-8"?>
<xsl:template xmlns:xsl="http://www.w3.org/1999/XSL/Transform" match="/ns0:root/ns0:image">
 <ns0:image xmlns:ns0="toto">
  <xsl:for-each select="@ns0:*|@*[namespace-uri()='']">
   <xsl:attribute name="{name()}" namespace="{namespace-uri()}">
    <xsl:value-of select="LL"/>
   </xsl:attribute>
  </xsl:for-each>
 </ns0:image>
</xsl:template>


Message édité par benou le 09-03-2005 à 00:56:03
n°1006629
llasserre
Posté le 09-03-2005 à 12:11:35  profilanswer
 

Effectivement ceci fonctionne, je doit donc avoir un problème de xpath.
 
J'ai modifier ton xsl en ceci :
 
XSL


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="toto">
 <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
 
 <xsl:template match="*">
  <xsl:element name="{name()}">
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates/>
  </xsl:element>
 </xsl:template>
 
 <xsl:template match="//ns0:image//xsl:value-of">
   <xsl:element name="xsl:copy-of">
     <xsl:attribute name="select">.//*</xsl:attribute>
   </xsl:element>
 </xsl:template>
 
 <xsl:template match="@*">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:template>
</xsl:stylesheet>  


 
et j'obtient bien le résultat voulu à savoir remplacer le value-of par un copy of.
 
Mais si je rajoute le tag stylesheet dans mon document source, le transformateur XSL ne passe plus dans le template //ns0: ...
 
XML


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ns0="schemas-MSWordXmlToolbox#03022005-162442">
 
 <xsl:template match="/ns0:root/ns0:image">
    <ns0:image>  
      <xsl:for-each select="@ns0:*|@*[namespace-uri()='']">  
        <xsl:attribute name="{name()}" namespace="{namespace-uri()}">  
          <xsl:value-of select="." />  
        </xsl:attribute>  
      </xsl:for-each>  
    </ns0:image>  
 </xsl:template>
 </xsl:stylesheet>


 
Peux me dire ou est ce que je me loupe ? :)
Merci beaucoup

n°1006661
benou
Posté le 09-03-2005 à 12:40:22  profilanswer
 

c'est parce que les namspace de tes 2 documents ne correspondent plus : faut que tu mettes la bonne uri pour le prefix ns0 dans ta XSL. dis toi que les prefix c'est juste un raccourcit pour ne pas avoir à écrire l'uri complète => quand tu matches ns0:image, en fait tu matches le tag 'image' du namespace correspondant au prefix ns0 c'est à dire 'toto' (c'est défini comme ca dans l'url que je t'ai filé), hors dans ton document xml, le tag image est dans le namespace "schemas-MSWordXmlToolbox#03022005-162442" => ca matche pas ...


Message édité par benou le 09-03-2005 à 14:21:36
n°1006826
llasserre
Posté le 09-03-2005 à 14:21:10  profilanswer
 

Houla oui, autant pour moi, dans l’euphorie j’avais oublier cela.
 
Merci beaucoup.  

n°1006828
benou
Posté le 09-03-2005 à 14:21:49  profilanswer
 

you're welcome :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  remplacer un noeud XSL

 

Sujets relatifs
[XML][XSL] Filtrage et trie dynamique[XSL] mon processeur XSL ne ferme plus les balises
Remplacer le JS par les CSS. Oui mais ....[ksh] remplacer un mot par plusieurs ligne
Transformation XSLcomment remplacer javascript:addFav() ? [règlé]
DOMParser et problème avec noeud bidonModifier (et non remplacer) contenu d'un fichier texte
Remplacer les espaces d'une chaineXSL et HTML ?
Plus de sujets relatifs à : remplacer un noeud XSL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR