Re: [xsl] Formatting issues

Subject: Re: [xsl] Formatting issues
From: ms <mina_hurray@xxxxxxxxx>
Date: Tue, 2 Jan 2007 09:51:55 -0800 (PST)
Hi:
 Thank you for all your help. 
Here is the sample XML:

<?xml version="1.0" encoding="UTF-8"?>
<?altova_xslfo E:\User Profiles\n26353\My
Documents\DigitalData\AMDS-0.6.3\Issues\Visit_Conditioning\test.xsl?>
<root>
	<test>
		<level1>
			<text>
				<para>This level should be displayed only if the
conditions are high and low.</para>
			</text>
			<locn>
				<cond1>high</cond1>
				<cond2>low</cond2>
			</locn>
			<level2>
				<text>
					<para>This level should be displayed only if the
conditions are high and deep.</para>
				</text>
				<locn>
					<cond1>high</cond1>
					<cond2>deep</cond2>
				</locn>
			</level2>
		</level1>
		<level1>
			<text>
				<para>This level should be displayed only if the
conditions are high and deep</para>
			</text>
			<locn>
				<cond1>high</cond1>
				<cond2>deep</cond2>
			</locn>
		</level1>
		<level1>
			<text>
				<para>This level should be displayed only if the
conditions are  high and steep</para>
			</text>
			<locn>
				<cond1>high</cond1>
				<cond2>steep</cond2>
			</locn>
			<level2>
				<text>
					<para>This level should be displayed only if the
conditions are high and steep</para>
				</text>
				<locn>
					<cond1>high</cond1>
					<cond2>steep</cond2>
				</locn>
			</level2>
		</level1>
	</test>
</root>

My sample XSLfo:

<?xml version="1.0" encoding="UTF-8"?>
<?altova_samplexml E:\User Profiles\n26353\My
Documents\DigitalData\AMDS-0.6.3\Issues\testdata.xml?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:fo="http://www.w3.org/1999/XSL/Format";>
	<xsl:variable name="val1">high</xsl:variable>
	<xsl:variable name="val2">deep</xsl:variable>
	<xsl:template match="root">
		<fo:root
xmlns:fo="http://www.w3.org/1999/XSL/Format";>
			<fo:layout-master-set>
				<fo:simple-page-master master-name="coverPage"
page-height="11in" page-width="8.5in" margin-top="5mm"
margin-bottom="5mm" margin-left="5mm"
margin-right="5mm">
					<fo:region-body
region-name="coverPage-region-body" margin-left="8mm"
margin-right="8mm" margin-top="44mm"
margin-bottom="25mm">
					
					</fo:region-body>
					<fo:region-before
region-name="coverPage-region-before"
precedence="false" extent="44mm"/>
					<fo:region-after
region-name="coverPage-region-after"
precedence="false" extent="50mm"
display-align="after"/>
				</fo:simple-page-master>
				<fo:page-sequence-master master-name="cover">
					<fo:repeatable-page-master-reference
master-reference="coverPage"/>
				</fo:page-sequence-master>
			</fo:layout-master-set>
			<fo:page-sequence master-reference="cover"
font-family="Helvetica" font-size="10pt">
				<fo:static-content
flow-name="coverPage-region-before">
				
				
				</fo:static-content>
				<fo:static-content
flow-name="coverPage-region-after">
				
				</fo:static-content>
				<fo:flow flow-name="coverPage-region-body">
					<fo:block>
						<xsl:apply-templates select="test"/>
					</fo:block>
				</fo:flow>
			</fo:page-sequence>
		</fo:root>
	</xsl:template>
	<xsl:template match="test">
		<fo:block>
			<xsl:apply-templates/>
		</fo:block>
	</xsl:template>
	<xsl:template match="level1">
		<xsl:choose>
			<xsl:when test=".//locn">
				<xsl:if test=".//locn/cond1=$val1 and
.//locn/cond2=$val2">
					<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"/>
								</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:otherwise>
		<xsl:call-template name="level">
			<xsl:with-param name="format">1</xsl:with-param>
			</xsl:call-template>
</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="level2">
		<xsl:choose>
			<xsl:when test=".//locn">
				<xsl:if test=".//locn/cond1=$val1 and
.//locn/cond2=$val2">
					<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="A"/>
								</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:otherwise>		<xsl:call-template name="level">
			<xsl:with-param name="format">a</xsl:with-param>
			</xsl:call-template></xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template name="level">
		<xsl:param name="format"/>
		<fo:list-block space-before="6pt"
space-before.conditionality="retain">
			<fo:list-item space-before="6pt">
				<fo:list-item-label end-indent="label-end()">
					<xsl:choose>
						<xsl:when test="$format = '1'">
							<fo:block>
								<fo:inline>
									<xsl:number format="1"/>.</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = 'A'">
							<fo:block>
								<fo:inline>
									<xsl:number format="A"/>.</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = '(1)'">
							<fo:block>
								<fo:inline>
									<xsl:number format="(1)"/>
								</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = '(1)'">
							<fo:block>
								<fo:inline>
									<xsl:number format="(1)"/>
								</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = '(a)'">
							<fo:block>
								<fo:inline>
									<xsl:number format="(a)"/>
								</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = '1)'">
							<fo:block>
								<fo:inline>
									<xsl:number format="1)"/>
								</fo:inline>
							</fo:block>
						</xsl:when>
						<xsl:when test="$format = 'a)'">
							<fo:block>
								<fo:inline>
									<xsl:number format="a)"/>
								</fo:inline>
							</fo:block>
						</xsl:when>
					</xsl:choose>
				</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:template>
</xsl:stylesheet>

The output PDF look has this:

1 This level should be displayed only if the
conditions are high and low.
A This level should be displayed only if the
conditions are high and deep.
2 This level should be displayed only if the
conditions are high and deep.

Now val1 and val 2 are high and deep. So the expected
output is: 

2 This level should be displayed only if the
conditions are high and deep.

However, instead of 2, it should be numbered 1 since
it is the first level.

Desired output on the PDF would be:

1. This level should be displayed only if the
conditions are high and deep.

Please let me know what my mistake is on this style
sheet. How can I filter the output as well as format
it correctly. 

--- Abel Braaksma <abel.online@xxxxxxxxx> wrote:

> Well, no. I tried to ask you what the output really
> must look like. I 
> have several answers from you that give partial
> info. I can expect this:
> 
> 1 some text
> 1 some other text
> 1 yet other text
> 
> I can expect this:
> 1 some text
> 2 some other text
> 3 yet other text
> 
> I can expect this:
> 1 some text
>     a) some other text
>          ii) yet other text
> 
> I have no idea how to do this.You gave quite an
> extensive XML and it 
> gives all kinds of info, but it does not provide a
> clear clue of what 
> you want. Please:
> 1. diminish the XML by leaving out all non-important
> parts (but make 
> sure it is still valid XML)
> 2. Make a small XSLT that works on that partial XML
> (using your own, 
> partial working techniques)
> 3. run your small XSLT against the small XML and
> 4. show (1), (2) and (3) with explanations to us
> 
> That way, you can (almost) count on it to receive a
> quite quick and to 
> the point answer. It will save you and others a lot
> of time. 
> Furthermore, it will help yourself to understand the
> problem better. 
> Quite often, people find the solutions by narrowing
> the problem domain 
> or by writing down explanatory texts for others.
> 
> Cheers,
> -- Abel
>    http://www.nuntia.com
> 
> ms wrote:
> > Hi:
> >
> > Actually, the text "This has values high and
> steep"
> > was only to indicate that if the conditional
> values
> > were high and steep, then this text should be
> > displayed. The textual matter is not important.
> What
> > is important is the formatting for each level like
> 1,
> > 2, etc.
> >
> > Does that make sense? Please let me know if you
> need
> > more information. 
> >
> > Thanks a lot
> > MS
> > --- Abel Braaksma <abel.online@xxxxxxxxx> wrote:
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Current Thread