2012-09-24 12 views
9

Ich möchte nur den Knoten auswählen, bei dem der Wert des untergeordneten Knotens einem bestimmten Wert entspricht.Wählen Sie den Knoten basierend auf dem Wert des untergeordneten Knotens in XSLT

Hier ist mein orig XML:

Das ist mein 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> 

ich alle Einträge extrahieren möchte, wo Name = 'AAA', so wäre das Ergebnis:

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

Ich bin auf XSLT 1.0 beschränkt.

Bitte geben Sie eine Anleitung. Ich bin fest, wie man alle Unterknoten für andere, die nicht übereinstimmen, fallen lässt.

Grüßen, Rahul

Antwort

13

Im Folgenden werden alle Eintragsknoten mit Unterknoten 'Name' ausgewählt, die gleich AAA sind.

//Entry[Name = "AAA"] 
1

Wie wäre es

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

alle Name Knoten, deren Text finden Inhalt ist AAA, dann eine Ebene auf Name des übergeordneten Knoten nach oben, which'd Entry sein.

2

Probieren Sie etwas wie dieses (List-Element hinzugefügt wohlgeformte XML zu erhalten):

<?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> 
Verwandte Themen