[xsl] Find elements whose ancestors are the same

Subject: [xsl] Find elements whose ancestors are the same
From: Gustave Stresen-Reuter <tedmasterweb@xxxxxxx>
Date: Mon, 26 Sep 2005 21:38:20 +0100
Hi,

Thanks again to everyone who has replied to these messages. I had no idea how hard this would be. It seemed so simple when I explained it to the client ;-)

I'm looking for an XPath expression that will find all elements whose ancestors are the same. By "same" I mean their @name is the same at each level of ancestry (and they appear in the same order).

For example, this expression would return a count of 2 for the following XML when filtered on the "daughter" folder (or "mother" or "grandfather" for that matter).

<root>
    <folder name="grandfather">
        <folder name="mother">
            <folder name="daughter" />
        </folder>
    </folder>
    <folder name="grandfather">
        <folder name="mother">
            <folder name="daughter" />
        </folder>
    </folder>
    <folder name="grandmother">
        <folder name="father">
            <folder name="son" />
        </folder>
    </folder>
</root>

I know it's going to be something like this, but I just can't get my head around it!

<xsl:copy-of select="/root//folder[@name = following-sibling::*/@name and ancestor-or-self::*/@name = following-sibling::*/@name/ancestor-or-self::*/@name" />

Thanks in advance!

Ted

Current Thread