|
Subject: Re: [xsl] Write context xpath expression From: Syd Bauman <Syd_Bauman@xxxxxxxxx> Date: Wed, 21 Oct 2009 21:37:11 -0400 |
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?
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Write context xpath expressio, Karl Stubsjoen | Thread | [xsl] Assistance with position-bas, Michael Friedman |
| [xsl] Write context xpath expressio, Karl Stubsjoen | Date | Re: [xsl] sgml to xml, Ganesh Babu N |
| Month |