Проблема связана с атрибутом номер-столбца-повторения для таблицы: элемент ячейки таблицы в базовой структуре данных листа.Для получения более подробной информации, пожалуйста, обратитесь к http://user.services.openoffice.org/en/forum/viewtopic.php?f=45&t=29674 и http://user.services.openoffice.org/en/forum/viewtopic.php?f=9&t=11865.
Хотя последняя ссылка утверждает, что разрешила проблему, решение не совсем то, что я искал.Мне потребовалось простое решение на основе индексов, которое позволяет более гибкую генерацию XML.Вот то, что я пытался выработать.
Я использовал xslt 2.0 для использования пользовательских функций.Вот таблица стилей ...
<xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="no"/>
<xsl:function name="my:getColumnValue">
<xsl:param name="tableRow" as="node()"/>
<xsl:param name="colIndex"/>
<xsl:param name="currentIndex"/>
<xsl:choose>
<xsl:when test="$currentIndex < $colIndex">
<xsl:variable name="repeatColumns" select="$tableRow/table:table-cell[$currentIndex]/@table:number-columns-repeated"/>
<xsl:choose>
<xsl:when test="$repeatColumns">
<xsl:choose>
<xsl:when test="$currentIndex + $repeatColumns - 1 >= $colIndex"><xsl:value-of select="$tableRow/table:table-cell[$currentIndex]"/></xsl:when>
<xsl:otherwise><xsl:value-of select="my:getColumnValue($tableRow, $colIndex - $repeatColumns + 1, $currentIndex + 1)"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="my:getColumnValue($tableRow, $colIndex, $currentIndex + 1)"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$tableRow/table:table-cell[$colIndex]"/></xsl:otherwise>
</xsl:choose>
</xsl:function>
<xsl:template match="//table:table">
<Tests>
<!-- Process all table rows -->
<xsl:variable name="colCount" select="count(table:table-row[1]/table:table-cell)"/>
<xsl:for-each select="table:table-row">
<xsl:if test="position() > 1">
<Test>
<SrNo><xsl:value-of select="my:getColumnValue(.,1,1)"/></SrNo>
<Name><xsl:value-of select="my:getColumnValue(.,2,1)"/></Name>
<Age><xsl:value-of select="my:getColumnValue(.,3,1)"/></Age>
<Height><xsl:value-of select="my:getColumnValue(.,4,1)"/></Height>
<Address><xsl:value-of select="my:getColumnValue(.,5,1)"/></Address>
</Test>
</xsl:if>
</xsl:for-each>
</Tests>
</xsl:template>
Приведенные выше теги являются просто заполнителями.Пожалуйста, замените их на соответствующие в вашем xslt.Это решение ограничено числом рекурсивных вызовов, разрешенных процессором xslt.
Если xslt 1.0 поддерживает отправку узла в качестве параметров, то мы можем попытаться заменить вышеуказанный udf, чтобы получить решение на основе шаблона.Если вы найдете какие-либо ошибки, дайте мне знать.