我对表的单元格变得疯狂。
我的桌子有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)的位置编号<??????>
减去z和y(= 1)加1:结果= 3
<xsl:param name="colspan">
<xsl:value-of select="($nameend)-($namest)+(1)"/>
</xsl:param>
在输入模板中将result = 3用作属性“ colspan”
<fo:table-cell number-columns-spanned="{$colspan}"
但是我看不到解决第二步的方法(????)
有任何想法吗??
谢谢皮亚
附言不,我不能更改源文件
最佳答案
给定此输入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>
笔记:
尽管您写道:“将z和y(= 1)加1:结果= 3”,但我假设
您的意思是“结果= 2”。
entry
映射到具有所需的table-cell
@number-columns-spanned
属性值,这是问题的关键方面。重新映射周围的元素以及映射到
fo
命名空间的工作也要做。