Re: Write context xpath expression
I have successfully used something like the following: --------- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates select=".//c"/> </xsl:template> <xsl:template match="c"> <xsl:message> <xsl:for-each select="ancestor-or-self::*"> <xsl:value-of select="concat( '/', local-name(.) )"/> </xsl:for-each> <xsl:text>[</xsl:text> <xsl:value-of select="position()"/> <xsl:text>]</xsl:text> </xsl:message> </xsl:template> </xsl:stylesheet> --------- Of course this drops the namespace information. (Which could be important in your situation, but didn't matter in mine where there were no name collisions in the documents). Also, I think this may give you undesired counts in the square brackets if you use a predicate to select only some of the <c> elements. But if you only want the path, that for-each should do the job, I think. Note that this sort of question is often easily answered on Dave Pawson's FAQ pages. See http://www.dpawson.co.uk/xsl/sect2/N6052.html#d9122e58. > In XSL 1.0, how can I write out the XPATH expression for the > current context? Example: > <a> > <b> > <c /> > <c /> <!-- assume this is the context --> > <c /> > </b> > </a> > Assuming <c/> is the current context I would like to determine the > xpath pattern like this: /a/b/c > How is this possible? I get how I could walk parent;;node() but I'd > be writing the pattern backwards! Any ideas?
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format