Ein kleines muster, wie du etwa eine tabellenreihe ersetzten koenntest , indem das span attribut durch leere dummy-zellen ersetzt. Ob die nodset funktion verfuegbar ist, kannst du einfach mit einem function-available ueberpreufen (siehe beispiel unten) - beachte die xalan nodset unterscheidet sich von der exslt nod-set funtion in der schreibweise.
Das nachfolgende stylesheet etwa durchlauf jede tabellen reihe, wobei die reihe "bereinigt" wird und spanned attribute entfernt und durch leere dummy zellen ersetzt wird. Danach wird die Auswertung ganz normal auf die entsprechende reihe durchgefuehrt (siehe kleiner test im 3. schritt wieviel zellen in der reihe vorhanden sind.)
Gruss, Holge r
<?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 erzeugen -->
<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 number-columns-spanned 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 > 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">
<!-- hier deine auswertung fuer die reihe -->
<!-- kleiner test -->
<row>
<xsl:for-each select="table:table-cell">
<cell number="{position()}"/>
</xsl:for-each>
</row>
</xsl:template>
</xsl:stylesheet>