|
Subject: RE: [xsl] Push Processing From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 2 Mar 2009 14:29:33 -0000 |
Well, you can't apply templates to a node that isn't there, so you need to
find another way.
In XSLT 2.0 you could try this:
<xsl:function name="f:expand" as="element()">
<xsl:param name="item" as="element(item)"/>
<xsl:param name="child" as="element()?"/>
<xsl:choose>
<xsl:when test="exists($child)">
<xsl:sequence select="$child"/>
</xsl:when>
<xsl:otherwise>
<emptyCell/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
then
<xsl:apply-templates select="f:expand(.,label), f:expand(.,code),
f:expand(.,no), ..."/>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Philip Vallone [mailto:philip.vallone@xxxxxxxxxxx]
> Sent: 02 March 2009 14:14
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Push Processing
>
> Hi List,
>
> I am using push processing to output a resulting FO file. I
> use apply-templates to build a table row and its cells.
> Normally I would build the table by using a pull philosophy,
> but it would require a lot of rework to the stylesheet. My
> problem occurs when I have an optional element. Using
> apply-templates, my output my leave out a cell, causing my
> cell alignment to be off. The below is a dumb-down version
> for example:
>
> <item-entry>
> <item>
> <label>1</label>
> <code>234</code>
> <no>12345</no>
> <partno>12-3456-0981-1</partno>
> <name>Widget</name>
> <qty>3</qty>
> </item>
> </item-entry>
>
> Suppose I am missing <nsn>, I need to apply an empty cell.
> How can I do this using push processing?
>
> <xsl:template match="item-entry">
> <xsl:apply-templates/>
> </xsl:template>
> <xsl:template match="item">
> <fo:table-row>
> <xsl:apply-templates/>
> </fo:table-row>
> </xsl:template>
> <xsl:template match="label">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
> <xsl:template match="code">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
> <xsl:template match="nsn">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
> <xsl:template match="partno">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
> <xsl:template match="name">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
> <xsl:template match="qty">
> <fo:table-cell>
> <fo:block>
> <xsl:value-of select="."/>
> </fo:block>
> </fo:table-cell>
> </xsl:template>
>
> Thanks,
>
> Phil
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Push Processing, Philip Vallone | Thread | RE: [xsl] Push Processing, Philip Vallone |
| [xsl] Push Processing, Philip Vallone | Date | RE: [xsl] Push Processing, Philip Vallone |
| Month |