xsl-list
[Top] [All Lists]

Re: [xsl] Find the root element from an attribute node

2008-07-10 06:16:40
2008/7/10 Marroc <marrocdanderfluff(_at_)yahoo(_dot_)co(_dot_)in>:
Hi all,  [xslt 2.0, Saxon 9]

I'm processing dita and xhtml documents with the same template. All I'm
doing is rewriting the links, that is @hef and @src attributes. However,
I've discovered laterly, for reasons I don't want to go into, that sometimes
the @href in the xhtml need to be handled differently. I want to detect
whether the ancestor of the particular href is <html> as opposed to <map>,
<task>, <concept> or <reference> so that I can treat it differently. How do
I do it?

<xsl:template match="@href[ancestor::html]">

Is never going to work. I've read with bewilderment the threads about the
xslt spec and that attributes are children of elements but elements are not
parents of children... So, that being the case, how exactly do I find out
where my current @href came from?


What you've done should be fine, but its slow to walk the ancestor
axis to the root element each time, so just do:

<xsl:variable name="isHTML" select="exists(/html)" as="xs:boolean"/>

and then:

match="@href[$isHTML]"

Perhaps you're doing xsl:copy within the attribute matching template?
That copies the entire attribute, name and value, the result, so its
different to the standard way of modifying an element - you have to
explicitly create a new attribute if you want to modify its value.

-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--