Holge r: OO-Calc-Exportfilter - Probleme mit number-columns-repeated

Beitrag lesen

Eigentlich muesste es so funktionieren:

  
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:exslt="http://exslt.org/common" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" exclude-result-prefixes="office exslt xalan table text">  
    <xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="no"/>  
    <xsl:param name="targetURL"/>  
    <xsl:strip-space elements="*"/>  
    <!-- 1. Schritt -->  
    <xsl:template match="/">  
        <datasheet>  
            <xsl:apply-templates select="//table:table[1]"/>  
            <!-- Nur 1. Tabellenblatt verwenden! -->  
        </datasheet>  
    </xsl:template>  
    <!-- 2. Schritt -->  
    <xsl:template match="table:table">  
        <xsl:for-each select="table:table-row">  
            <xsl:variable name="AdjustedTableRow">  
                <table:table-row>  
                    <!-- soweit ich gesehen habe benoetigst du nur die table:table-cell, beachte, dass gruppiereungen in spreadseets unterelemente erzeugte -->  
                    <xsl:call-template name="CleanUpRow"/>  
                </table:table-row>  
            </xsl:variable>  
            <xsl:choose>  
                <xsl:when test="function-available('xalan:nodeset')">  
                    <xsl:apply-templates select="xalan:nodeset($AdjustedTableRow)/*" mode="Adjusted"/>  
                </xsl:when>  
                <xsl:when test="function-available('exslt:node-set')">  
                    <xsl:apply-templates select="exslt:node-set($AdjustedTableRow)/*" mode="Adjusted"/>  
                </xsl:when>  
            </xsl:choose>  
        </xsl:for-each>  
    </xsl:template>  
    <!-- 2.1. Schritt -->  
    <xsl:template name="CleanUpRow">  
        <xsl:for-each select="table:table-cell">  
            <!-- erstelle bereinigte zeile -->  
            <table:table-cell>  
                <xsl:for-each select="@*[not(local-name() = 'number-columns-spanned')]">  
                    <xsl:attribute name="{name()}">  
                        <xsl:value-of select="."/>  
                    </xsl:attribute>  
                </xsl:for-each>  
                <!-- kopiere all unterelemente -->  
                <xsl:copy-of select="*"/>  
            </table:table-cell>  
            <!-- ueberpruefe ob columns repeated besteht -->  
            <xsl:if test="@table:number-columns-spanned">  
                <!-- erstelle leere table-cell elemente -->  
                <xsl:call-template name="CreateDummyCell">  
                    <xsl:with-param name="Number" select="@table:number-columns-spanned - 1"/>  
                </xsl:call-template>  
            </xsl:if>  
        </xsl:for-each>  
    </xsl:template>  
    <!-- 2.1.1. Schritt -->  
    <xsl:template name="CreateDummyCell">  
        <xsl:param name="Number"/>  
        <xsl:if test="$Number &gt; 0">  
            <table:table-cell/>  
            <xsl:call-template name="CreateDummyCell">  
                <xsl:with-param name="Number" select="$Number - 1"/>  
            </xsl:call-template>  
        </xsl:if>  
    </xsl:template>  
    <!-- 3. Schritt -->  
    <xsl:template match="table:table-row" mode="Adjusted">  
        <xsl:variable name="cName" select="1"/>  
        <xsl:variable name="cMaster" select="3"/>  
        <xsl:variable name="cLang" select="12"/>  
        <record>  
            <Name>  
                <xsl:value-of select="table:table-cell[$cName]/text:p"/>  
            </Name>  
            <Master>  
                <xsl:value-of select="table:table-cell[$cMaster]/text:p"/>  
            </Master>  
            <Sprache>  
                <xsl:value-of select="table:table-cell[$cLang]/text:p"/>  
            </Sprache>  
        </record>  
    </xsl:template>  
</xsl:stylesheet>