Subject: Re: [xsl] problems with position() and following-sibling From: Kenneth Stephen <marvin.the.cynical.robot@xxxxxxxxx> Date: Fri, 12 Aug 2005 10:25:58 -0500 |
George, 1. Everywhere you've coded following-sibling::Cell[7] - you need to replace that with ../Cell[7] . 2. The Excel format has a default namespace of urn:schemas-microsoft-com:office:spreadsheet set on the root element (Worksheet). You need to be using that in your XPath expressions too. In the following example, I've mapped that namespace to "ss" : <xsl:template match="ss:Row"> <row> <xsl:apply-templates /> </row> </xsl:template> <xsl:template match="ss:Cell[position() > 1 and position() < 7]"> <entry> <xsl:value-of select="ss:Data" /> <xsl:if test="position()=3 and ../ss:Cell[7]"> <xsl:message>+++ making footnote +++</xsl:message> <footnote> <para> <xsl:value-of select="../ss:Cell[7]/ss:Data" /> </para> </footnote> </xsl:if> </entry> </xsl:template> Regards, Kenneth On 8/12/05, Georges Schmitz <georges.schmitz@xxxxxxxxx> wrote: > My use case: > > I have an Excel Sheet in xml format, that is basically build out of 6 > columns. Now and then I have a value in column 7, that should be made a > footnote in column 2 of the output. Column 1 is to be eliminated in the > output (I just use it for grouping). > > Example Data (6 columns, sometimes 7): > > <Row> > <Cell><Data ss:Type="String">LAS</Data></Cell> > <Cell><Data ss:Type="String">Masterreport</Data></Cell> > <Cell><Data ss:Type="String">alle 4 Lizenzarten</Data></Cell> > <Cell><Data ss:Type="String">Lizenzdruck</Data></Cell> > <Cell><Data ss:Type="String">Jasper</Data></Cell> > <Cell><Data ss:Type="String">pilot_licence_CH.xml</Data></Cell> > <Cell><Data ss:Type="String">Alle Lizenzvorlagen sind in zip-Dateien > zusammengefasst.</Data></Cell> > </Row> > > Output should be (5 columns): > > <row> > <entry>Masterreport</entry> > <entry>alle 4 Lizenzarten<footnote> > <para>Alle Lizenzvorlagen sind in zip-Dateien > zusammengefasst.</para> > </footnote> > </entry> > <entry>Lizenzdruck</entry> > <entry>Jasper</entry> > <entry>pilot_licence_CH.xml</entry> > </row> > > My approach is to use simple template matching for rows and cells: > > <xsl:template match="Row"> > <row> > <xsl:apply-templates/> > </row> > </xsl:template> > > <xsl:template match="Cell[position() > 1 and position() < 7]"> > <entry> > <xsl:value-of select="Data"/> > <xsl:if test="position()=3 and following-sibling::Cell[7]"> > <xsl:message>+++ making footnote +++</xsl:message> > <footnote><para><xsl:value-of > select="following-sibling::Cell[7]/Data"/></para></footnote> > </xsl:if> > </entry> > </xsl:template>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] problems with position() and , Georges Schmitz | Thread | Re: [xsl] problems with position() , Georges Schmitz |
[xsl] Breaking from the loop (for-e, Oleg Konovalov | Date | Re: [xsl] Breaking from the loop (f, Kenneth Stephen |
Month |