2008-11-05 7 views
2

Problème XSLT-newbie: je dois remplacer une valeur textuelle par un fichier XML. Tous les autres nœuds doivent rester inchangés. Voici mon fichier d'entrée (in.xml):Traitement uniquement des noeuds sélectionnés

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <level1 attr1="val1"> 
     <level2>in</level2> 
    </level1> 
</root> 

Voici ma transformation XSLT (subst.xsl):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/"> 
     <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="//node()"> 
     <xsl:copy> 
      <xsl:apply-templates /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/root/level1/level2/text()">out</xsl:template> 
</xsl:stylesheet> 

Je cours avec le Ant-script suivant (build.xml):

<?xml version="1.0" encoding="UTF-8"?> 
<project name="test" default="test" basedir="."> 
    <target name="test"> 
     <xslt style="subst.xsl" in="in.xml" out="out.xml" /> 
    </target> 
</project> 

Et voici ce que je reçois (out.xml):

<?xml version="1.0" encoding="UTF-8"?><root> 
    <level1> 
     <level2>out</level2> 
    </level1> 
</root> 

L'attribut "attr1" de "level1" est manquant.

Je serais très reconnaissant si quelqu'un

  • me dire quel est le problème avec subst.xsl

OU

  • me donner une idée comment forcer xslt-processeur il suffit de copier les noeuds non appariés pour sortir le fichier et de le faire à la main (ce qui est dans mon cas error-p rone).

Répondre

11

Votre transformation d'identité est manquant attributs (évidemment). Utilisez ceci à la place:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Ensuite, ajoutez simplement votre dernier modèle.

Questions connexes