Subject: RE: [xsl] Conditionally create an html table based upon existance of one or two node sets From: Rod Kane <rkane@xxxxxxxxxxxxxxxxxx> Date: Tue, 30 Mar 2010 14:57:25 -0400 |
Thanks Michael, In this case the xml is used to construct a query and the tool that generates the xml will leave parts of the xml empty if it cannot translate a spec. Should have mentioned that earlier. The objective of the template is to identify the row and/or column elements that are missing children, so it's possible that there are missing fragments. Rod -----Original Message----- From: Michael Kay [mailto:mike@xxxxxxxxxxxx] Sent: Tuesday, March 30, 2010 2:47 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Conditionally create an html table based upon existance of one or two node sets Although you stated the requirement as generating the table if its content was non-empty, I reckoned that if either of the input node-sets was non-empty then the table content would also be non-empty, so it's more efficient and easier (and possible in XSLT 1.0) to test the input node-sets rather than saving the output tree in a variable. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > -----Original Message----- > From: Rod Kane [mailto:rkane@xxxxxxxxxxxxxxxxxx] > Sent: 30 March 2010 19:40 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] Conditionally create an html table based > upon existance of one or two node sets > > Thanks Wendell, have not used that before and will look into it. > > Thanks again, > > Rod > > -----Original Message----- > From: Wendell Piez [mailto:wapiez@xxxxxxxxxxxxxxxx] > Sent: Tuesday, March 30, 2010 2:38 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Conditionally create an html table based > upon existance of one or two node sets > > Rod, > > At 02:02 PM 3/30/2010, you wrote: > >I need to create a table if either the second and third > >"apply-template" directives return nodes, and otherwise > create nothing . > > Bind them to a variable so: > > <xsl:variable name="results"> > <xsl:apply-templates .../> > <xsl:apply-templates .../> > </xsl:variable> > > then generate your table if $results has any content. > > In XSLT 1.0 the easiest way is to test for non-whitespace text: > > <xsl:if test="normalize-space($results)"> > <table border="1" width="85%" > > <xsl:copy-of select=$results"/> > </table> > </xsl:if> > > In XSLT 2.0 you can be smarter about what's inside $results. > > You can also split $results into two variables if you need to > handle the two apply-templates results separately. > > Good luck, > Wendell > > > > "Fiscal Year" is the Dimension name and C02 and C09 are > the "Column > > Group Name"s, but the table creation is not quite correct > as the rows > > are not displayed correctly. > > > >Thank you in advance. > > > >Rod > > > > > > > ><?xml version="1.0"?> > ><xsl:stylesheet version="1.0" > >xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > > ><xsl:template match="/"> > ><HTML> > ><BODY> > > <xsl:apply-templates select="Template"/> > > <xsl:apply-templates > > > >select="Template/Queries/DataQuery/Abstract/Columns/Groups/Gr > oup/Dimens > >ions/Dimension[count(*) > > = 0]"/> > > <xsl:apply-templates > > > >select="Template/Queries/DataQuery/Abstract/Rows/Groups/Group > /Dimension > >s/Dimension[count(*) > > = 0]"/> > ></BODY> > ></HTML> > ></xsl:template> > > > > > ><xsl:template match="Template"> > > <B> Template Name: <xsl:value-of select="@Name" > > /> </B> > > <BR/><BR/> > > > > <xsl:choose> > > <xsl:when > > > test="./Queries/DataQuery/Abstract/Columns|Rows/Groups/Group/Dimension > > s/Dimension[count(*) > > = 0]"> > > > > <TABLE BORDER="1" width="85%" > > > <TR BGCOLOR="D3D3D3" > > > <TD > > width="65%"> <xsl:text>Dimension Name</xsl:text> > </TD> > > <TD> > > <xsl:text>Column Group Name</xsl:text> </TD> > > </TR> > > </TABLE> > > > > </xsl:when> > > </xsl:choose> > > > ></xsl:template> > > > > > > > > > ><xsl:template match="Dimension"> > > > > <xsl:for-each select="."> > > <TR BGCOLOR="D3D3D3" > > > <TD > > width="65%"> <xsl:value-of select="./@Name" /> </TD> > > <TD> > > <xsl:value-of select="../../@Name" /> </TD> > > </TR> > > </xsl:for-each> > > > ></xsl:template> > > > > > ></xsl:stylesheet> > > > > > ====================================================================== > Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx > Mulberry Technologies, Inc. http://www.mulberrytech.com > 17 West Jefferson Street Direct Phone: 301/315-9635 > Suite 207 Phone: 301/315-9631 > Rockville, MD 20850 Fax: 301/315-8285 > ---------------------------------------------------------------------- > Mulberry Technologies: A Consultancy Specializing in SGML > and XML > ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Conditionally create an h, Michael Kay | Thread | [no subject], Unknown |
RE: [xsl] Conditionally create an h, Michael Kay | Date | Re: [xsl] Create Table, bernie bonn |
Month |