我越来越疯狂地使用桌子的单元格。 我的表有3列。下面你看到一行(只有片段):
<tgroup>
<colspec name="x">
<colspec name="y">
<colspec name="z">
<tbody>
<row>
<entry>abc
<entry namest="y" nameend="z">blabla
第二个条目(blabla)应该跨越两个条目(=表格单元格)。信息位于“nameend”和“namest”属性中。
我的方式是:
xsl:template match="entry" ...
获取<colspec name=z>
(此处为3)和<colspec name="y">
(此处为2)的位置编号
<??????>
substract z和y(= 1)add 1:result = 3
<xsl:param name="colspan">
<xsl:value-of select="($nameend)-($namest)+(1)"/>
</xsl:param>
在条目模板中使用result = 3作为属性“colspan”
<fo:table-cell number-columns-spanned="{$colspan}"
但我认为无法解决我的第二步(????)
任何想法? 谢谢Pia
P.S。不,我无法更改源文件
答案 0 :(得分:4)
鉴于此输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<tgroup>
<colspec name="x"/>
<colspec name="y"/>
<colspec name="z"/>
<tbody>
<row>
<entry>abc</entry>
<entry namest="y" nameend="z">blabla 1</entry>
</row>
<row>
<entry namest="x" nameend="z">blabla 2</entry>
</row>
<row>
<entry namest="x" nameend="y">blabla 3</entry>
<entry>cde</entry>
</row>
</tbody>
</tgroup>
此XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="entry[@namest and @nameend]">
<xsl:variable name="namest" select="@namest"/>
<xsl:variable name="nameend" select="@nameend"/>
<xsl:variable name="namestPos" select="count(ancestor::tgroup/colspec[@name=$namest]/preceding-sibling::colspec)"/>
<xsl:variable name="nameendPos" select="count(ancestor::tgroup/colspec[@name=$nameend]/preceding-sibling::colspec)"/>
<table-cell number-columns-spanned="{$nameendPos - $namestPos + 1}">
<xsl:apply-templates/>
</table-cell>
</xsl:template>
</xsl:stylesheet>
将产生此输出:
<?xml version="1.0" encoding="UTF-8"?>
<tgroup>
<colspec name="x"/>
<colspec name="y"/>
<colspec name="z"/>
<tbody>
<row>
<entry>abc</entry>
<table-cell number-columns-spanned="2">blabla 1</table-cell>
</row>
<row>
<table-cell number-columns-spanned="3">blabla 2</table-cell>
</row>
<row>
<table-cell number-columns-spanned="2">blabla 3</table-cell>
<entry>cde</entry>
</row>
</tbody>
</tgroup>
备注:强>
entry
已根据需要映射到table-cell
@number-columns-spanned
属性值,这是问题的关键方面。重新映射
周围的元素和映射到fo
命名空间的工作仍有待完成。