xsl-list
[Top] [All Lists]

Re: problems with position() and following-sibling

2005-08-12 08:25:58
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() &gt; 1 and position() &lt; 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(_dot_)schmitz(_at_)heitec(_dot_)de> 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() &gt; 1 and position() &lt; 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>



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--