首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“entry”元素中创建@morerow属性

在“entry”元素中创建@morerow属性
EN

Stack Overflow用户
提问于 2021-11-08 11:03:28
回答 1查看 79关注 0票数 1

我想在'entry‘元素中添加@morerow属性。如果您看到输入中有<vmerge val="restart"/>,在下一个<tr>/<tc>中有<vmerge/>,那么<vmerge>的总数应该是@morerows属性值,请查看预期的输出。请在这方面帮助我,我非常感激。

输入:

代码语言:javascript
复制
<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>

预期输出:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 14:49:32

如果我正确理解了规则--您需要在vmerge val=“重新启动”之前的同一行中使用tcPr/vmerge计数tc元素。

下面的代码应该适用于您:

代码语言:javascript
复制
<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>

这是我通过附加输入获得的输出:

代码语言:javascript
复制
<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‘属性)的空条目,可以为它们创建空模板:

代码语言:javascript
复制
<xsl:template match="tc[tcPr/vmerge[not(@val='restart')]]"/>

下面可以看到一个具有更复杂表的示例(没有忽略带有带有@val='restart‘属性的tcPr/vmerge的条目)。

测试输入:

代码语言:javascript
复制
<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>

测试输出:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69882452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档