2012-09-24 18 views
9

Vorrei selezionare solo il nodo in cui il valore del nodo figlio corrisponde a un determinato valore.Selezionare il nodo in base al valore del nodo figlio in XSLT

Ecco il mio orig XML:

Questo è il mio orig XML

<Entry> 
<Name>AAA</Name> 
<line id="1">A</line> 
<line id="2">B</line> 
</Entry> 
<Entry> 
<Name>BBB</Name> 
<line id="1">C</line> 
<line id="2">D</line> 
</Entry> 
<Entry> 
<Name>AAA</Name> 
<line id="1">E</line> 
<line id="2">F</line> 
</Entry> 
<Entry> 
<Name>CCC</Name> 
<line id="1">G</line> 
<line id="2">H</line> 
</Entry> 

Vorrei estrarre tutte le voci in cui Name = 'AAA', quindi il risultato sarebbe:

<Entry> 
<Name>AAA</Name> 
<line id="1">A</line> 
<line id="2">B</line> 
</Entry> 
<Entry> 
<Name>AAA</Name> 
<line id="1">E</line> 
<line id="2">F</line> 
</Entry> 

Sono limitato all'utilizzo di XSLT 1.0.

Fornire indicazioni. Sono bloccato su come eliminare tutti i sottonodi per gli altri che non corrispondono.

saluti, Rahul

risposta

13

Quanto segue selezionerà tutti i nodi di ingresso con i sottonodi "Nome" uguali a AAA.

//Entry[Name = "AAA"] 
1

Come su

//Name[text()='AAA']/.. 

trovare tutti Name nodi il cui contenuto del testo è AAA, per poi passare ad un livello superiore al nodo padre di nome, which'd essere Entry.

2

provare qualcosa di simile (elemento elenco aggiunto per ottenere XML ben formato):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
    <List> 
     <xsl:apply-templates select="//Entry[Name='AAA']"/> 
    </List> 
    </xsl:template> 

    <xsl:template match="Entry"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 
Problemi correlati