Re: XSLT Concepts
Thank You all for your invaluable Comments, Especially Michael. On Fri, Oct 1, 2010 at 8:37 PM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > On 01/10/2010 1:50 PM, chirag matkar wrote: >> >> Hello Friends, >> I am an Amateur Developer in Xsl transformations. >> I work on Research Article XML conversions. >> I just want to be clear on some Concepts of XSLT. > > Welcome. > >> 1)When we apply a Template<xsl:apply-templates/> the whole text within >> the tags in input file data gets applied and new element are >> processed as we declare them. > > xsl:apply-templates, in the absence of a select attribute, selects the > immediate children of the context node, and for each one, it finds the best > matching template rule, and applies that rule. If there's no explicit rule > for a node in the stylesheet, it will apply the built-in rule (this often > happens for text nodes, where the built-in rule copies the text unchanged to > the output). > > Note I'm using the terminology of trees and nodes, rather than tags and > input files. If you want to understand XSLT concepts, you need to learn to > think of the input XML as a tree (the tree that comes out of the XML > parser), not the lexical angle-bracket stuff that went into the parser. > > An individual call on xsl:apply-templates only causes the children to be > processed, not all the descendants. However, the default action for the > children is to recurse downwards to their own children, so the default > processing does a complete tree walk. >> >> So when we use<xsl:value of select=""/> ,additional data is >> processed.This results into extra junk data as i have noticed.How to >> avoid such circumstances.? > > You should (usually!) process text nodes using ether xsl:apply-templates or > xsl:value-of, but not both. > >> 2)Also Suppose we tag the input data with new elements,the tags appear >> in the sequence of initial text in the data.How can we sequentially >> keep changing order of the data as we wish and apply templates >> accordingly. >> Example - we need to tag article title which appears at end in the >> input file but we wish to have it tagged first in the output file.ie >> change order of tags according to our requirements. > > This is where the select attribute of xsl:apply-templates comes in. Normally > the children are processed in (input) document order. If you want a > different order, or if you want to process the children selectively, you can > do: > > <xsl:apply-templates select="author, abstract, citations, body"/> > > (That's XSLT 2.0 syntax: in 1.0 you need four sucessive calls on > xsl:apply-templates, each to process one kind of child element). >> >> 3)Can we template match a tag more than one time and process nodes >> within it sequentially? >> >> > Yes. If you want different processing on different occasions, use modes. The > usual example is a table of contents: > > <xsl:apply-templates select="*" mode="table-of-contents"/> > <xsl:apply-templates select="*" mode="article-body"/> > > The xsl:template rule itself has a mode attribute, and the template will > only be activated if its mode matches the requested mode. > > Michael Kay > Saxonica > > -- Regards, Chirag Matkar
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format