2012-09-24 26 views
9

Me gustaría seleccionar solo aquellos nodos donde el valor del nodo secundario coincide con un valor determinado.Seleccionar nodo basado en el valor del nodo secundario en XSLT

Aquí es mi orig XML:

Ésta es mi XML orig

<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> 

me gustaría extraer todas las entradas donde Name = 'AAA', por lo que el resultado sería:

<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> 

Estoy limitado a usar XSLT 1.0.

Por favor, brinde cualquier orientación. Estoy atascado en cómo colocar todos los nodos secundarios para otros que no coinciden.

cordiales, Rahul

Respuesta

13

Lo siguiente seleccionará todos los nodos de entrada con los subnodos 'Nombre' que son iguales a AAA.

//Entry[Name = "AAA"] 
1

¿Qué tal

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

encontrar todos Name nodos cuyo contenido de texto es AAA, a continuación, pasar a un nivel superior al nodo padre del Nombre, which'd ser Entry.

2

intentar algo como esto (elemento de la lista Agregado para obtener un formato XML):

<?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> 
Cuestiones relacionadas