xsl-list
[Top] [All Lists]

Re: [xsl] Axis specifier questions once again

2009-11-12 11:05:44
Hi Ken:

Thank you for your response.

Here is my problem.

Step1-3 have to be a nested list.

Every listlevel in list1 =step1, listlevel  in list2=step2 and
listlevel in list3=step3.

So my template for each list looks like this:

<xsl:template match="list2">
<xsl:param name="level" select="substring-after(local-name(), 'list')"/>
                <xsl:for-each-group select="./listlevel" group-by=".">
<xsl:element name="{ak:step($level)}">
        <text>
                                        <para>
                                        
<xsl:apply-templates select="*[not(following-sibling::list3) and
not(self::note)]"/>
                                        </para>
                                </text>
<xsl:apply-templates
select="following-sibling::*[1][not(self::listlevel)]|list3|listlevel"/>
</xsl:element>
</xsl:for-each-group>
</xsl:template>


Now, if I do a <xsl:apply-templates select="note"/> at the end, my output is

<step1>

<note><para>test</para></note>
 <text>
 sample1
 </text>

<step2>

 <text>
 sample2
 </text>
<note><para>1 Note</para>
</note>
<note><para>2 Note</para>
</note>
<note><para>3 Note</para>
</note>
<step3>

 <text>
sample3
 </text>
</step3>

 <text>
 sample4
 </text>
<step3>

 <text>
 sample5
 </text>
</step3>
 <text>
 sample6
 </text>



</step2>
<note><para>1 Note</para>
</note>
<note><para>2 Note</para>
</note>
<note><para>3 Note</para>
</note>
</step1>

Should I just change my approach in the the way I am numbering these
steps? Please advice.

Thanks






On Wed, Nov 11, 2009 at 3:01 PM, G. Ken Holman
<gkholman(_at_)cranesoftwrights(_dot_)com> wrote:
At 2009-11-11 13:26 -0600, a kusa wrote:

I have a nested list like this:
...
So in my transformation, the above snippet would transform as follows
with the exception of the last notes where I am having a problem:
...
Now, here is my problem. I want the <note> elements at the end of the
last <listlevel> element to come under the last step2 element.

Fine ... so you want to first process step2 without processing notes, and
then you want to process the notes.  I think regarding your issue this way
(if I've understood you correctly) is better than trying to conceive of axis
addressing as you've tried.  I think you are missing the issue that the
result tree is created in the order of the result tree, not in the order of
the source tree.

I hope the example below helps.

. . . . . . . Ken

t:\ftemp>type akusa.xml
<list1>
<note><para>test</para></note>
 <listlevel>
 sample1
 </listlevel>

<list2>
 <listlevel>
 sample2
 </listlevel>
<list3>

 <listlevel>
sample3
 </listlevel>
</list3>

 <listlevel>
 sample4
 </listlevel>
<list3>

 <listlevel>
 sample5
 </listlevel>
</list3>
 <listlevel>
 sample6
 </listlevel>
<note><para>1 Note</para></note>
<note><para>2 Note</para></note>
<note><para>3 Note</para></note>
</list2>
</list1>
t:\ftemp>call xslt akusa.xml akusa.xsl
<?xml version="1.0" encoding="utf-8"?><step1>
<note><para>test</para></note>
 <text>
 sample1
 </text>

<step2>
 <text>
 sample2
 </text>
<step3>

 <text>
sample3
 </text>
</step3>

 <text>
 sample4
 </text>
<step3>

 <text>
 sample5
 </text>
</step3>
 <text>
 sample6
 </text>



</step2><note><para>1 Note</para></note><note><para>2
Note</para></note><note><para>3 Note</para></note>
</step1>
t:\ftemp>type akusa.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
               version="1.0">

<xsl:template match="list1">
 <step1>
   <xsl:apply-templates/>
 </step1>
</xsl:template>

<xsl:template match="list2">
 <!--first produce the output not considering notes-->
 <step2>
   <xsl:apply-templates select="node()[not(self::note)]"/>
 </step2>
 <!--then continue the output with the notes-->
 <xsl:apply-templates select="note"/>
</xsl:template>

<xsl:template match="list3">
 <step3>
   <xsl:apply-templates/>
 </step3>
</xsl:template>

<xsl:template match="listlevel">
 <text>
   <xsl:apply-templates/>
 </text>
</xsl:template>

<xsl:template match="note">
 <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>rem Done!



--
Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman                 mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>