[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Retrieving Full XPATH expression

Subject: RE: Retrieving Full XPATH expression
From: "Tom Landon" <toml@xxxxxxxxxxxx>
Date: Fri, 10 Aug 2001 11:51:29 -0700
xsl if xpath
This is not exactly what you need, but it might be a good starting point:

<!--
***************************************************************************
Template
    path

Description
    Converts a node to an XPath-like expression suitable for error messages.

Parameters
    node - Node to trace.  Default value is ".".
****************************************************************************
 -->
<xsl:template name="path">
    <xsl:param name="node" select="."/>

    <!-- Process ancestors first -->
    <xsl:if test="$node">
        <xsl:call-template name="path">
            <xsl:with-param name="node" select="$node/.."/>
        </xsl:call-template>
    </xsl:if>

    <!-- Process this node next -->
    <xsl:choose>
        <!-- No node.  Either the original node was empty, or we have
recursed
        past the root. -->
        <xsl:when test="not($node)"/>

        <!-- Root node -->
        <xsl:when test="not($node/..)">
            <xsl:text>/</xsl:text>
        </xsl:when>

        <!-- Attribute node (test if node is in set of parent's
attributes) -->
        <xsl:when test="$node = $node/../@*">
            <!-- Do not output the 'name' predicate; the element has output
it -->
            <xsl:if test="name($node) != 'name'">
                <!-- Output the attribute's value as a predicate as an
                additional hint as to which element we are referencing -->
                <xsl:text/>[@<xsl:value-of
select="name($node)"/>="<xsl:text/>
                <xsl:value-of select="$node"/>"]<xsl:text/>
            </xsl:if>

            <!-- Output the name of the element -->
            <xsl:text/>/@<xsl:value-of select="name($node)"/>
        </xsl:when>

        <!-- Some other node (with an optional 'name' attribute) -->
        <xsl:otherwise>
            <!-- Do not output a second / immediately after the root / -->
            <xsl:if test="$node/../.."> <!-- "if not a child of the
root" -->
                <xsl:text>/</xsl:text>
            </xsl:if>

            <!-- Output the name of the element -->
            <xsl:value-of select="name($node)"/>

            <!-- Add a 'name' predicate if present as an additional hint as
to
            which element we are referencing -->
            <xsl:if test="$node/@name">
                <xsl:text/>[@name="<xsl:value-of
select="$node/@name"/>"]<xsl:text/>
            </xsl:if>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of john smith
Sent: Friday, August 10, 2001 11:17 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:  Retrieving Full XPATH expression


Given:

<A>
  <B>
    <C>
      <D id="007">
        <E>val1</E>
      </D>
      <D id="008">
        <E>val2</E>
      </D>
    <C>
  </B>
</A>

How do I get the full Xpath for each node..For example, if the
context node is <E> (with value "val1"), I want to get its full xpath
as A/B/C/D[1]/E[1] and for the second occurrence of <E> (with value "val2"),
I want to get its full xpath as A/B/C/D[2]/E[2].

Thanks a lot for the help.

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.