2010-07-07 3 views
1

J'utilise XSLT pour manipuler les données à l'intérieur d'un fichier XML (je prends les tripes d'un fichier XML et les mettre dans un nouveau shell dans un autre fichier XML). J'utilise seulement certaines des données dans le premier fichier, et les données des parties que je n'utilise pas sont concaténées à la fin du nouveau fichier. Comment puis-je empêcher XSLT de faire cela?XSLT junk dumping à la fin de mon fichier

Merci!

EDIT: Voici quelques pseudo-code, je ne peux pas poster le code réel:

<xsl:output method="xml"/> 
<xsl:template match="foo"> 
    <xsl:element name="bar"> 
     <!--... makes elements and traverses some of the other file ...--> 
    </xsl:element> 
</xsl:template> 

Et la sortie:

<foo> 
     <bar> 
      <!-- ... --> 
     </bar> 
    </foo> 

    <!-- junk at the end of the file that matches up with the content of the unused data tags --> 

    0 

    N 
    N 
    Y 
    00000148 
    ASDF 
+0

Vous aurez besoin de poster un code si vous voulez bien réponses. –

Répondre

3

XSLT a un modèle de correspondance racine par défaut. Pour le remplacer, essayez quelque chose comme ça dans votre XSLT:

<xsl:template match="/"> 
    <xsl:apply-templates select="foo"/> 
</xsl:template>  
<xsl:template match="foo"> 
    <xsl:element name="bar"> 
     <!--... makes elements and traverses some of the other file ...--> 
    </xsl:element> 
</xsl:template> 
+0

+ Bon exemple, merci! –

+0

Je pense que vous devriez ajouter à votre réponse que le rebut est le résultat du modèle intégré pour les noeuds de texte, comme la réponse de harpo. –

4

XSLT comprend certains default templates qui sont i nvoquée lorsque vous n'en écrivez pas pour la remplacer. Par exemple, si vous ne pas inclure un modèle correspondant à l'élément racine, il fera ceci:

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

Il y a aussi un modèle par défaut qui émet le contenu textuel des éléments correspondants. C'est probablement le "indésirable" que vous voyez dans votre sortie.

Je pense que vous devez éviter cela en incluant un modèle de racine et correspondant explicitement les éléments qui vous intéressent.

+0

+ Bonne explication! –

0

Seulement pour être complet - vous n'avez pas besoin de faire correspondre l'élément racine si vous ne voulez pas. L'autre façon d'éviter l'utilisation du modèle par défaut intégré est de définir un modèle vide qui recueille tout le reste à la fin du fichier XSLT comme celui-ci

<xsl:template match="*" /> 
Questions connexes