Obtaining the Current Node for the Current XSLT Template

In a stylesheet, the current node is the node for which the XSLT processor instantiates a template. When the XPath processor evaluates an expression during stylesheet processing, the initial context node for the expression is set to the current node for the stylesheet instruction that contains the expression. Because the context node can change during evaluation of subexpressions, it is useful to be able to retrieve, from within a subexpression, the original context node for which the expression is being evaluated. You can use the current() function for this purpose. The format is

node-set current() 
               

            

The current() function returns a node set that contains only the current node for the current template. The current() function is specified in the W3C XSLT Recommendation.

For example, the following stylesheet causes the XSLT processor to pass the bookstore node to the outer xsl:for-each instruction:

<xsl:stylesheet 
               

              
xmlns:xsl="http://www.w3.org/XSL/Transform" version="1.0" >
                   
<xsl:template match="/"> 
                   
<xsl:for-each select="bookstore"> 
                   
<xsl:for-each select=
                   
"book[@style=current()/@specialty]"> 
                   
... 
                   
</xsl:for-each> 
                   
</xsl:for-each> 
                   
</xsl:template> 
                   

                
</xsl:stylesheet>

The bookstore node is the current node within the outer xsl:for-each instruction. Within the inner xsl:for-each instruction, a book node is the current node.

The current() function in the inner expression returns the bookstore element because the bookstore element is the current node for the inner xsl:for-each instruction. The result of the query contains book elements if the value of their style attribute is the same as the value of the specialty attribute of the bookstore element ( novel).

Suppose the select attribute in the inner xsl:for-each instruction specified the dot ( .) instead of the current() function:

<xsl:for-each select="book[@style=./@specialty]">
               

            

In a query, the dot specifies the context node. This query would return a book if the value of its style attribute was the same as the value of its specialty attribute.

You can nest xsl:for-each instructions more than one level deep. In any given nested xsl:for-each instruction, the current() function returns the current node for the closest enclosing xsl:for-each instruction.

XML-to-XML Mapper

XML to XML mapping tools in Stylus Studio provide a powerful visual interface for mapping XML data from-and-to virtually any data format using industry-standard XSLT and XQuery technologies.

EDI Mapping

To transform EDI to XML, whether for X12 or EDIFACT, Stylus Studio provides the design tools and run-time support. EDIFACT, X12 and custom EDI formats can be translated, validated and mapped using the EDI Mapping adapter technology described here.

Translating XML documents to X12

In-place, via XSLT and via XQuery are all mechanisms supported for converting XML to X12

Scientific, Photo & Control Equipment

Scientific, photo & control equipment companies hear clicks and beeps all day. But, when it comes to data integration it needs to be done in a flash, that's why they use Stylus Studio. Come see which top companies are seeing XML in a brand new light!

Stylus Most Wanted

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-2007 All Rights Reserved.