Reputation: 137
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
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
Reputation: 1474
The following will select all entry nodes with subnodes 'Name' that equal AAA.
//Entry[Name = "AAA"]
Upvotes: 17
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