xsl-list
[Top] [All Lists]

Re: [xsl] Formatting issues

2006-12-26 07:18:42
Hi:

Thank you for your help so far. I forgot to mention
that I use xslt 1.0, I am not sure if we can use for
statements in 1.0

Here are my examples:

Input XML:

<root>
        <level1>
                <text>
                        <para>This has values high and steep</para>
                </text>
                <locn>
                        <cond1>high</cond1>
                        <cond2>steep</cond2>
                </locn>
                <level2>
                        <text>
                                <para>This has values high and deep</para>
                        </text>
                        <locn>
                                <cond1>high</cond1>
                                <cond2>deep</cond2>
                        </locn>
                </level2>
        </level1>
        <level1>
                <text>
                        <para>This has values high and low</para>
                </text>
                <locn>
                        <cond1>high</cond1>
                        <cond2>low</cond2>
                </locn>
        </level1>
        <level1>
                <text>
                        <para>This has values high and steep</para>
                </text>
                <locn>
                        <cond1>                 high</cond1>
                        <cond2>steep</cond2>
                </locn>
                <level2>
                        <text>
                                <para>This has values high and steep</para>
                        </text>
                        <locn>
                                <cond1>high</cond1>
                                <cond2>steep</cond2>
                        </locn>
                </level2>
        </level1>
</root>


XSLT for level1:

<xsl:template match="level1">
        <xsl:choose>
                <xsl:when test=".//locn">
                        <xsl:if test=".//locn/cond1=$cond1 and
.//locn/cond2=$cond2">
                                <fo:list-block space-before="6pt"
space-before.conditionality="retain">
                                        <fo:list-item>
                                                <fo:list-item-label 
end-indent="label-end()">
                                                        <fo:block>
                                                                <xsl:number 
format="1" from="level1"/>
                                                        </fo:block>
                                                </fo:list-item-label>
                                                <fo:list-item-body 
start-indent="body-start()"
end-indent="0pt">
                                                        <fo:block>
                                                                
<xsl:apply-templates/>
                                                        </fo:block>
                                                </fo:list-item-body>
                                        </fo:list-item>
                                </fo:list-block>
                        </xsl:if>
                </xsl:when>
        </xsl:choose>
</xsl:template>

This template repeats for level2...6

$cond1 and $cond2 are being passed thru the xslt for
testing purposes and have been set to high and steep
respectively for testing.

So given $cond1=high and $cond2=steep

The output when this XSLT is applied to the XML ,
should be:

1. This has values high and steep
2. This has values high and steep.
    A. This has values high and steep.

But what I am getting is this:

1. This has values high and steep
1. This has values high and steep.
    A. This has values high and steep.

Please let me know how this ca be resolved.

--- Abel Braaksma <abel(_dot_)online(_at_)xs4all(_dot_)nl> wrote:

ms wrote:
Level1 - 1,2,3 etc
Level2 - A, B, C
Level3 - i,ii,..
Level4 - (1), (2)
Level5 - (a), (b)
Level6 - (i), (ii)
  

Aha. Well, just add more templates to my base
template.

The hierarchy for levels is that level 1 is the
parent
for level2, level2 is he parent for level3 and so
on.
i.e.

[...]

Now in an XML , there can be any number of these
levels, and I have a logic to filter these levels
based on certain conditions.
  

I see. So that part is working. Send your XSLT for
where it is not 
working. Make the smallest possible example that
does not work, and add 
the input, too. Also, add an example of what the
output is that you expect.

I tried <xsl:number from="level1" format="1"/>
But that only numbers all levels with 1 and does
not
increment them sequentially. 
  

Indeed. In your <xsl:template> where you match for
"level1", add a 
variable with one <xsl:number /> instruction in it.
That's your counter 
(see my example).

This is my problem. How do I write the XSLT to
basically check if previous levels have satisfied
the
filtering condition

This is what my XSLT is about. You can use it for
that. Though I assume 
you will have to use the your own XPath expressions
in the matches.

 and if they have, include them for
counting, else remove them and count only those
levels
that satisfy the condition and count sequentially.
  

Which is what it does, too ;)
Your conditions will likely be different, though.

Please send what you've got (minimized to your
problem domain).

Cheers,
-- Abel


--~------------------------------------------------------------------
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>
--~--




__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.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>
--~--