Subject: Re: [xsl] Re: applying templates to all child elements except two specific ones From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Fri, 6 Dec 2002 08:14:40 -0800 (PST) |
Hi Ram, "Ram UGroups" <ram_ugroups@xxxxxxxxx> wrote in message news:20021206151330.17986.qmail@xxxxxxxxxxxxxxxxxxxxxxxxxx > Hello Dimitre, > > Thank you so much for the response. But I still am not > able to figure out how to work on all the descendant > elements except child1 and child2. It is seen in the result of the transformation: as example they are pre-pendeded with "X". To specify whatever processing is necessary, replace this with your code. ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL > > Basically in my requirement, after the transformation, > child1 and child2 should remain the same but > everyother element's text need to worked upon which > are descendants of <element1>. When I tried to use > your template, its the <child1> and <child2> elements > that are being transformed. could you please throw > more light on it ? > > Thanks. > --- Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: > > --- Ram UGroups wrote: > > > > > Hello, > > > > > > I do have an element in my input XML file which > > has a > > > nested structure with lots of other elements. If > > the > > > context element is called <element1>, I need to > > > process all the child elements of <element1> by > > > changing the case of their data, leaving two > > specific > > > child elements <child1> and <child2>. > > > > > > Eg: > > > > > > <someroot> > > > <element1> > > > <child1>first child<child1> > > > <name> > > > <firstname>John</firstname> > > > <lastname>Doe</lastname> > > > </name> > > > <address> > > > <street>555 First Stree</street> > > > <city>some city</city> > > > <state>some state</state> > > > <child2>random</child2> > > > </address> > > > </element1> > > > <otherelements/> > > > </someroot> > > > > > > So data of all the elements between <element1> > > tags > > > should be changed to a different case except the > > data > > > in the elements <child1> and <child2>. > > > > > > Any help would be appreciated. > > > > > > Thanks. > > > > The example provided is not a well-formed xml > > document. Also child2 is > > not a child of element1. > > > > Below is a solution to your problem, using the > > following modified > > source.xml: > > ---------- > > <someroot> > > <element1> > > <child1>first child</child1> > > <name> > > <firstname>John</firstname> > > <lastname>Doe</lastname> > > </name> > > <address> > > <street>555 First Stree</street> > > <city>some city</city> > > <state>some state</state> > > <child2>random</child2> > > </address> > > <child2>of element1</child2> > > </element1> > > <otherelements/> > > </someroot> > > > > > > Transformation: > > -------------- > > <xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output omit-xml-declaration="yes"/> > > > > <xsl:template match="@*|node()"> > > <xsl:copy> > > <xsl:apply-templates select="@*|node()"/> > > </xsl:copy> > > </xsl:template> > > <xsl:template match="text()[normalize-space()]"> > > X<xsl:value-of select="."/> > > </xsl:template> > > > > <xsl:template > > match="text()[ancestor::child1[../self::element1] > > or > > ancestor::child2[../self::element1] > > ]"> > > Y<xsl:value-of select="."/> > > </xsl:template> > > </xsl:stylesheet> > > > > when applied to the source xml document above, this > > transformation > > produces the following result: > > > > <someroot> > > <element1> > > <child1> > > Yfirst child</child1> > > <name> > > <firstname> > > XJohn</firstname> > > <lastname> > > XDoe</lastname> > > </name> > > <address> > > <street> > > X555 First Stree</street> > > <city> > > Xsome city</city> > > <state> > > Xsome state</state> > > <child2> > > Xrandom</child2> > > </address> > > <child2> > > Yof element1</child2> > > </element1> > > <otherelements></otherelements> > > </someroot> > > > > > > This is essentially the identity transformation with > > an override for > > text nodes, which have a "child1" or "child2" > > ancestor, whose parent is > > "element1". > > > > In case in the text of your message: > > " > > >I need to > > > process all the child elements of <element1> by > > > changing the case of their data, leaving two > > specific > > > child elements <child1> and <child2>. > > " > > > > you meant not "child elements" but "descendent > > elements", then the > > match of the overriding template should be changed > > to: > > > > text()[ancestor::child1[ancestor::element1] > > or > > > > ancestor::child2[ancestor::element1] > > ]"> > > __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: applying templates to, Ram UGroups | Thread | [xsl] conflict resoltion for templa, Andrew Welch |
RE: [xsl] Locating Things Relative , G. Ken Holman | Date | Re: [xsl] Locating Things Relative , Jeff Kenton |
Month |