[xsl] passing filtered tree to template

Subject: [xsl] passing filtered tree to template
From: Stefan Hunziker <stefan@xxxxxxxxxxxxx>
Date: Mon, 6 Jun 2011 17:56:45 +0200
Hi
I have the following problem: Given an xml like the following:

<test>
    <items>
        <item>
            <index>1</index>
            <property>x</property>
        </item>
        <item>
            <index>2</index>
            <property>y</property>
        </item>
        <item>
            <index>3</index>
            <property>x</property>
        </item>
    </items>
</test>


and a stylesheet like:


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:template match="test">
        <myTest>
        <xsl:variable name="xItems">
            <xsl:copy-of select="items"/>
        </xsl:variable>
            <xsl:apply-templates
select="items[item/property='y']"/><!-- wrong try! -->
        </myTest>
    </xsl:template>

    <xsl:template match="items">
        <xsl:for-each select="item">
            <myItem>
                <xsl:value-of select="index"/>
            </myItem>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>



I would like to pass only the items with property='x' to the items
matching template. The first try as written above of course doesn't
work, if there is an x item then the whole tree is passed, if there is
none, nothing is passed. I do further processing in the items
template, so I don't want to change it to match="item" or to apply the
filter in the items template.

Any help is much appreciated!

thanks, kind regards

Stefan

Current Thread