2011-04-07 4 views
2

suppose que j'ai ce xml:comment filtrer les noeuds en XML en utilisant xslt ..?

<college> 
    <student> 
     <name>amit</name> 
     <file>/abc/kk/final.c</file> 
     <rollno>22</rollno> 
    </student> 
    <student> 
     <name>sumit</name> 
     <file>/abc/kk/up.h</file> 
     <rollno>23</rollno> 
    </student> 
    <student> 
     <name>nikhil</name> 
     <file>/xyz/up.cpp</file> 
     <rollno>24</rollno> 
    </student> 
    <student> 
     <name>bharat</name> 
     <file>/abc/kk/down.h</file> 
     <rollno>25</rollno> 
    </student> 
    <student> 
     <name>ajay</name> 
     <file>/simple/st.h</file> 
     <rollno>27</rollno> 
    </student> 
</college> 

j'utilise pour-chacun dans « .xsl » pour afficher toutes les entrées de noeuds, mais je veux seulement pour afficher les entrées de ces nœuds uniquement dans lequel le nom de fichier commence par "/ abc/kk" comme je suis nouveau à xslt ..

s'il vous plaît fournir la solution.

J'utilise:

<xsl:for-each select="college/student"> 
<tr> 
<td><xsl:value-of select="name"/></td> 
<td><xsl:value-of select="file"/></td> 
<td><xsl:value-of select="rollno"/></td> 
</tr> 
+1

Veuillez fournir un format XML bien formaté afin que nous puissions mieux comprendre votre question –

+0

Bonne question, +1. Voir ma réponse pour une solution complète, courte et facile qui utilise les fonctionnalités fondamentales de XSLT tels que les modèles et le traitement push style. Une explication détaillée est fournie. –

Répondre

3

Comme ceci:

<xsl:for-each select="college/student[starts-with(file, '/abc/kk')]"> 
<!-- ... --> 

Les supports [ ] délimitent un "filtre", et à l'intérieur qui filtre, vous pouvez avoir des fonctions comme starts-with()

+0

+1, bien fait .. –

+0

Merci beaucoup. – kuldeep

+0

@kuldeep: veuillez cocher cette réponse.Il vous aidera à obtenir plus de personnes désireuses de répondre à votre question sur SO. – khachik

0

vous aussi pouvez utiliser [..] dans match:

+0

Merci beaucoup. – kuldeep

5

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:template match="student[starts-with(file,'/abc/kk')]"> 
    <tr><xsl:apply-templates/></tr> 
</xsl:template> 

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

<xsl:template match="student"/>  
</xsl:stylesheet> 

lorsqu'il est appliqué au document XML fourni:

<college> 
    <student> 
     <name>amit</name> 
     <file>/abc/kk/final.c</file> 
     <rollno>22</rollno> 
    </student> 
    <student> 
     <name>sumit</name> 
     <file>/abc/kk/up.h</file> 
     <rollno>23</rollno> 
    </student> 
    <student> 
     <name>nikhil</name> 
     <file>/xyz/up.cpp</file> 
     <rollno>24</rollno> 
    </student> 
    <student> 
     <name>bharat</name> 
     <file>/abc/kk/down.h</file> 
     <rollno>25</rollno> 
    </student> 
    <student> 
     <name>ajay</name> 
     <file>/simple/st.h</file> 
     <rollno>27</rollno> 
    </student> 
</college> 

produit le résultat souhaité, correct:

<tr> 
    <td>amit</td> 
    <td>/abc/kk/final.c</td> 
    <td>22</td> 
</tr> 
<tr> 
    <td>sumit</td> 
    <td>/abc/kk/up.h</td> 
    <td>23</td> 
</tr> 
<tr> 
    <td>bharat</td> 
    <td>/abc/kk/down.h</td> 
    <td>25</td> 
</tr> 

Explication:

  1. Un modèle correspondant à tout student ayant un enfant dont la valeur file chaîne commence par '/ abc/kk'. Cela met simplement le contenu généré dans un élément wrapper tr.

  2. Un modèle correspondant à tout student qui n'a pas de corps et supprime efficacement (ne copie pas cet élément à la sortie). Ce modèle a une priorité inférieure à la première, car la première est plus spécifique. Par conséquent, seuls les éléments student qui ne correspondent pas au premier modèle sont traités avec le second modèle.

  3. Un modèle correspondant à n'importe quel élément enfant de tout élément student. Cela encapsule simplement le contenu dans un élément td.

+0

+1 Correcte le style XSLT. –

Questions connexes