This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Identifying two tags that share some attribute names and values
Hi Joerg,
> And my comments/questions to Jeni's stylesheet:
>
> >><xsl:template match="a">
> >> <xsl:variable name="a" select="." />
> >> <xsl:for-each select="$file2/b[@* = $a/@*]">
>
> I thought of a filter too, but I didn't find a sensible one. The
> above one isn't completely logical to me. What exactly does it mean?
> Maybe "all <b>s, whose all attributes are in <a> and don't have a
> different value"?
It means "all <b>s that have an attribute that has the same value as
at least one of <a>'s attributes". It's not a very strong filter, but
it means that if <a> is:
<a x="1" y="2" z="3" />
then you won't process <b> if it's:
<b x="4" y="5" />
but would process <b> if it was:
<b a="2" />
(and then discard it in the xsl:for-each).
Actually, given that the attributes on a have to be a subset of the
attributes on b (I think that's the way round it is now), then a
stronger filter would count the attributes as well:
$file2/b[@* = $a/@* and
count(@*) >= count($b/@*)]
There's a balance here between the amount of work that goes on in the
filter, and the amount of work that goes on within the xsl:for-each;
Zack should really test where the balance is to work out what filter
to use.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list