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