|
Subject: Re: [xsl] Understanding Identity Transformations From: Karl Stubsjoen <kstubs@xxxxxxxxx> Date: Sat, 12 Feb 2005 12:20:59 -0700 |
In the below sample, i'm interested in the "BLUE" categories. I still
want to bring back the original XML source but omit everything not
"BLUE". See the FOO cat="GREEN", it contains a cat="BLUE"... of
course I would not expect to return this element since the parent
element cat is "GREEN".
SAMPLE DATA
<DATA>
<FOO cat="BLUE">
</FOO>
<FOO cat="RED">
</FOO>
<FOO cat="BLUE">
<BAR cat="YELLOW" />
<BAR cat="BLUE">
</FOO>
<FOO cat="GREEN">
<BAR cat="BLUE" />
</FOO>
</DATA>
EXPECTED RESULT:
<DATA>
<FOO cat="BLUE">
</FOO>
<FOO cat="BLUE">
<BAR cat="BLUE">
</FOO>
</DATA>
On Sat, 12 Feb 2005 19:28:13 +0100, Joris Gillis <roac@xxxxxxxxxx> wrote:
> Tempore 18:09:53, die 02/12/2005 AD, hinc in
> xsl-list@xxxxxxxxxxxxxxxxxxxxxx scripsit Karl Stubsjoen <kstubs@xxxxxxxxx>:
>
> > Is the nature of identifty transformations recursive? How does the
> > engine know that eventually the recursive call is going to run out?
> Recursive algorithms are not a priori infinite. The copying stops when all
> nodes have been copied.
>
> > I have a large document, I am interested in transforming it. I want
> > to reproduce the xml source but restricted for a specific value match.
> > I totally understand how to write the appropriate select in an
> > apply-template rule to get the desired results, but do not understand
> > how to mix this call up with the recursive template identity
> > tranformation.
> > So, starting with SAMPLE_002, where would I stub out and add the
> > qualifying select? What confuses me, is that in the sample we are
> > saying (basically) grab everything from the top to the bottom and at
> > every level. I'm affraid that my select on an element who's value is
> > '1234' is going to mess up the results. I hope this makes sense and I
> > understand the concept of changing a single element, or single
> > attribute by setting up the match, but in this case, I need the parent
> > node, and all of the child nodes.
>
> Maybe you could learn be studying an example:
>
> Consider this fictional sample:
>
> XML:
> <root>
> <part1>
> <!--I will be copied-->
> <node copy="yes">So do <b>I</b>.</node>
> </part1>
> <part2>
> <node copy="no">I <b>don't</b> feel like being copied today</node>
> <data>
> <value>1</value>
> <value>2</value>
> <value>3</value>
> </data>
> </part2>
> </root>
>
> * You want an identity transform for 'part1', with the execption of 'b'
> which should become 'bold'
> * 'part2' must be processed without any identity transform, but with
> templates and algorithms you define.
>
> OUTPUT:
> <result>
> <part1> <!--I will be copied-->
>
> <node copy="yes">So do <bold>I</bold>.</node>
> </part1>
> <p>I don't feel like being copied today</p>
> <p>Sum= 6</p>
> </result>
>
> How can this be achieved, while we don't have to be afraid of templates
> messing up each-other? By using modes:
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>
> <xsl:output method="xml" indent="yes"/>
>
> <xsl:template match="root">
> <result>
> <xsl:apply-templates select="part1" mode="IdTr"/>
> <xsl:apply-templates select="part2"/>
> </result>
> </xsl:template>
>
> <xsl:template match="node">
> <p><xsl:apply-templates/></p>
> </xsl:template>
>
> <xsl:template match="data">
> <p>Sum= <xsl:value-of select="sum(value)"/></p>
> </xsl:template>
>
> <xsl:template match="@* | node()" mode="IdTr">
> <xsl:copy>
> <xsl:apply-templates select="@* | node()" mode="IdTr"/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="b" mode="IdTr">
> <bold><xsl:apply-templates/></bold>
> </xsl:template>
>
> </xsl:stylesheet>
>
> regards,
> --
> Joris Gillis (http://www.ticalc.org/cgi-bin/acct-view.cgi?userid=38041)
> Gaudiam omnibus traderat W3C, nec vana fides
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Understanding Identity Tr, Joris Gillis | Thread | Re: [xsl] Understanding Identity Tr, Joris Gillis |
| Re: [xsl] Understanding Identity Tr, Joris Gillis | Date | Re: [xsl] Understanding Identity Tr, Joris Gillis |
| Month |