[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Push Processing
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: 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|