在 'entry' 元素中创建 @morerows 属性
creating @morerows attribute in the 'entry' element
我想在 'entry' 元素中添加 @morerows 属性。如果您在输入中看到 <vmerge val="restart"/>
并且在下一个 <tr>/<tc>
中看到 <vmerge/>
那么 <vmerge>
的总数应该是 @morerows
属性值,请查看预期输出.
请在这方面帮助我,非常感谢我。
输入:
<tbl>
<tblGrid>
<gridCol/>
<gridCol/>
</tblGrid>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
</tbl>
预期输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry align="left">
<p>content here</p>
</entry>
<entry morerows="" align="right">
<p>Contenet here</p>
</entry>
</row>
<row>
<entry align="left">
<p></p>
</entry>
<entry align="left">
<p></p>
</entry>
</row>
</tbody>
</tgroup>
</table>
如果我对规则的理解正确 - 您需要计算 tc 个元素,其中 tcPr/vmerge 在同一行中具有前面的 vmerge val="restart".
以下代码应该适合您:
<xsl:template match="tc">
<entry>
<!-- morerows rule -->
<xsl:if test="tcPr/vmerge[@val='restart']">
<xsl:variable name="currentTcPosition" select="count(preceding-sibling::tc) + 1"/>
<xsl:variable name="vmergeId" select="generate-id(tcPr/vmerge)"/>
<xsl:variable name="followingTcRow" select="parent::tr/following-sibling::tr/tc[position() = $currentTcPosition]"/>
<xsl:variable name="morerowsValue" select="count($followingTcRow/tcPr/vmerge[not(@val='restart')][preceding::vmerge[@val='restart'][1][generate-id(.) = $vmergeId]]) + 1"/>
<xsl:attribute name="morerows" select="$morerowsValue"/>
</xsl:if>
<xsl:apply-templates/>
</entry>
</xsl:template>
这是我通过附加输入获得的输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry>Content Here</entry>
<entry morerows="2">Content here</entry>
</row>
<row>
<entry>Contenet here</entry>
<entry>Content here</entry>
</row>
</tbody>
</tgroup></table>
请注意,如果您需要忽略带有 tcPr/vmerge 的空条目(没有 @val='restart' 属性),您可以为它们创建空模板:
<xsl:template match="tc[tcPr/vmerge[not(@val='restart')]]"/>
下面您可以看到一个更复杂的示例 table(不忽略带有 tcPr/vmerge 且没有 @val='restart' 属性的条目)。
测试输入:
<tbl>
<tblGrid>
<gridCol/>
<gridCol/>
</tblGrid>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<p>Content here</p>
</tc>
</tr></tbl>
测试输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry>
Content Here
</entry>
<entry morerows="2">
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Content Here
</entry>
<entry morerows="3">
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
</tbody>
</tgroup></table>
我想在 'entry' 元素中添加 @morerows 属性。如果您在输入中看到 <vmerge val="restart"/>
并且在下一个 <tr>/<tc>
中看到 <vmerge/>
那么 <vmerge>
的总数应该是 @morerows
属性值,请查看预期输出.
请在这方面帮助我,非常感谢我。
输入:
<tbl>
<tblGrid>
<gridCol/>
<gridCol/>
</tblGrid>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
</tbl>
预期输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry align="left">
<p>content here</p>
</entry>
<entry morerows="" align="right">
<p>Contenet here</p>
</entry>
</row>
<row>
<entry align="left">
<p></p>
</entry>
<entry align="left">
<p></p>
</entry>
</row>
</tbody>
</tgroup>
</table>
如果我对规则的理解正确 - 您需要计算 tc 个元素,其中 tcPr/vmerge 在同一行中具有前面的 vmerge val="restart".
以下代码应该适合您:
<xsl:template match="tc">
<entry>
<!-- morerows rule -->
<xsl:if test="tcPr/vmerge[@val='restart']">
<xsl:variable name="currentTcPosition" select="count(preceding-sibling::tc) + 1"/>
<xsl:variable name="vmergeId" select="generate-id(tcPr/vmerge)"/>
<xsl:variable name="followingTcRow" select="parent::tr/following-sibling::tr/tc[position() = $currentTcPosition]"/>
<xsl:variable name="morerowsValue" select="count($followingTcRow/tcPr/vmerge[not(@val='restart')][preceding::vmerge[@val='restart'][1][generate-id(.) = $vmergeId]]) + 1"/>
<xsl:attribute name="morerows" select="$morerowsValue"/>
</xsl:if>
<xsl:apply-templates/>
</entry>
</xsl:template>
这是我通过附加输入获得的输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry>Content Here</entry>
<entry morerows="2">Content here</entry>
</row>
<row>
<entry>Contenet here</entry>
<entry>Content here</entry>
</row>
</tbody>
</tgroup></table>
请注意,如果您需要忽略带有 tcPr/vmerge 的空条目(没有 @val='restart' 属性),您可以为它们创建空模板:
<xsl:template match="tc[tcPr/vmerge[not(@val='restart')]]"/>
下面您可以看到一个更复杂的示例 table(不忽略带有 tcPr/vmerge 且没有 @val='restart' 属性的条目)。
测试输入:
<tbl>
<tblGrid>
<gridCol/>
<gridCol/>
</tblGrid>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Content Here</p>
</tc>
<tc>
<tcPr>
<vmerge val="restart"/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<tcPr>
<vmerge/>
</tcPr>
<p>Content here</p>
</tc>
</tr>
<tr>
<tc>
<p>Contenet here</p>
</tc>
<tc>
<p>Content here</p>
</tc>
</tr></tbl>
测试输出:
<table>
<tgroup rowsep="0" cols="2">
<colspec colname="c1" colnum="1" colwidth="24.94*"/>
<colspec colname="c2" colnum="2" colwidth="25.06*"/>
<tbody>
<row>
<entry>
Content Here
</entry>
<entry morerows="2">
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Content Here
</entry>
<entry morerows="3">
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
<row>
<entry>
Contenet here
</entry>
<entry>
Content here
</entry>
</row>
</tbody>
</tgroup></table>