Rahul
Rahul

Reputation: 137

Select node based on child node value in XSLT

I would like to select only those node where child node value matches a certain value.

Here is my orig XML:

This is my 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>

I would like to extract all entries where Name = 'AAA', so the result would be:

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

I am limited to using XSLT 1.0.

Please provide any guidance. I am stuck on how to drop all sub-nodes for others that do not match.

regards, Rahul

Upvotes: 11

Views: 35251

Answers (3)

jpj
jpj

Reputation: 49

Try something like this (List element added to get well-formed 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>

Upvotes: 4

xshoppyx
xshoppyx

Reputation: 1474

The following will select all entry nodes with subnodes 'Name' that equal AAA.

//Entry[Name = "AAA"]

Upvotes: 17

Marc B
Marc B

Reputation: 360562

How about

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

find all Name nodes whose text content is AAA, then move up one level to Name's parent node, which'd be Entry.

Upvotes: 3

Related Questions