2010-07-22 4 views
3

Je dispose d'un fichier xml ici:Comment sélectionner un élément spécifié en utilisant XSLT par son index?

<DM_Function Function="attribute value"> 
    <DM> 
    <DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3"> 
    </DM_Source> 
    </DM> 
</DM_Function> 

Dans le fichier XSLT, il y a une variable:

<xsl:param name="dmIndex" select="2" /> 

Je veux transformer le fichier XML en autres.Dispositif variables est l'indice de l'élément, J'espère que l'autre fichier XML montrera juste l'élément Racine et l'élément spécifié (y compris les attributs).

+0

Bonne question (+1). Voir ma réponse pour une solution courte et complète. –

Répondre

0

Cette transformation:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="dmIndex" select="2" /> 

<xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:copy-of select="DM[$dmIndex]"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur le document XML fourni:

<DM_Function Function="attribute value"> 
    <DM> 
    <DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3"> 
    </DM_Source> 
    </DM> 
</DM_Function> 

produit le résultat souhaité, correct:

<DM_Function Function="attribute value"> 
    <DM> 
     <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"/> 
    </DM> 
</DM_Function> 
+0

Je comprends.Merci beaucoup. –

+0

@ Howard-Jia: Content que cela soit utile. Alors que diriez-vous d'accepter ma réponse (en cliquant sur le signe de la case près de la réponse)? :) –

+0

Aussi 'select =" @ * | DM [$ dmIndex] "' fera l'affaire. –

Questions connexes