[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
At 08:47 PM 6/11/2008, you wrote:
And here's some generic XSLT 1.0 that will return an XPath for any node on request. Just apply templates in the "xpath" mode to the node for which you want the path.
<xsl:template match="*" mode="xpath-step">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:if test="count(../*[name()=name(current())]) > 1">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::*[name()=name(current())]) + 1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="processing-instruction()" mode="xpath-step">
<xsl:text>/processing-instruction()</xsl:text>
<xsl:if test="count(../processing-instruction()) > 1">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::processing-instruction()) + 1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
RE: [xsl] Embedding the XPath of an input Text Fragment in output
Subject: RE: [xsl] Embedding the XPath of an input Text Fragment in output From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 12 Jun 2008 10:42:07 -0400 |
At 08:47 PM 6/11/2008, you wrote:
Here's a basic 1.0 solution that should return the xpath creation you describe....
And here's some generic XSLT 1.0 that will return an XPath for any node on request. Just apply templates in the "xpath" mode to the node for which you want the path.
Cheers, Wendell
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="node()" mode="xpath"> <xsl:apply-templates select="ancestor::*|." mode="xpath-step"/> </xsl:template>
<xsl:template match="/" mode="xpath-step"> <xsl:text>/</xsl:text> </xsl:template>
<xsl:template match="*" mode="xpath-step">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:if test="count(../*[name()=name(current())]) > 1">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::*[name()=name(current())]) + 1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="text()" mode="xpath-step"> <xsl:text>/text()</xsl:text> <xsl:if test="count(../text()) > 1"> <xsl:text>[</xsl:text> <xsl:value-of select="count(preceding-sibling::text()) + 1"/> <xsl:text>]</xsl:text> </xsl:if> </xsl:template>
<xsl:template match="processing-instruction()" mode="xpath-step">
<xsl:text>/processing-instruction()</xsl:text>
<xsl:if test="count(../processing-instruction()) > 1">
<xsl:text>[</xsl:text>
<xsl:value-of select="count(preceding-sibling::processing-instruction()) + 1"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="comment()" mode="xpath-step"> <xsl:text>/comment()</xsl:text> <xsl:if test="count(../comment()) > 1"> <xsl:text>[</xsl:text> <xsl:value-of select="count(preceding-sibling::comment()) + 1"/> <xsl:text>]</xsl:text> </xsl:if> </xsl:template>
<xsl:template match="@*" mode="xpath-step"> <xsl:text>/@</xsl:text> <xsl:value-of select="name()"/> </xsl:template>
</xsl:stylesheet>
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Embedding the XPath of an, Ryan Graham | Thread | Re: [xsl] Embedding the XPath of an, David Carlisle |
Re: [xsl] XSLT Compiler for C/C++?, Andrew Welch | Date | Re: [xsl] Embedding the XPath of an, David Carlisle |
Month |