首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何添加前面兄弟姐妹的属性,其中属性具有字母数字值

如何添加前面兄弟姐妹的属性,其中属性具有字母数字值
EN

Stack Overflow用户
提问于 2014-09-25 14:10:46
回答 1查看 115关注 0票数 0

建议如何添加前面兄弟姐妹的属性(字母数字文本)。在输入xml中,如果像"namest“这样的属性只有编号,那么添加属性就很好了。如果属性有字母数字数据,那么XSLT在‘xsl:name=属性“”cellNum“处会出错。请建议一下。(XSLT 2)。

输入XML:

代码语言:javascript
运行
复制
<article>
<floats>
<table>
    <tbody>
        <tr><entry>1</entry><entry namest="col2" nameend="col5">2-5</entry><entry namest="col6" nameend="col9">6-9</entry><entry>10</entry><entry namest="col11" nameend="col13">11-13</entry><entry>14</entry></tr>
        <tr><entry>2</entry><entry namest="col2" nameend="col5">2-5</entry><entry namest="col6" nameend="col9">6-9</entry><entry>11</entry></tr>
    </tbody>
</table>
</floats>
</article>

XSLT:

代码语言:javascript
运行
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>

    <xsl:template match="tr">
        <tr>
        <xsl:for-each select="entry">
            <xsl:variable name="varNameST" select="sum(number(substring-after(preceding-sibling::entry/@namest, 'col')))"/>
            <xsl:variable name="varNameEND" select="sum(number(substring-after(preceding-sibling::entry/@nameend, 'col')))"/>
            <xsl:variable name="varCellcount"><xsl:number count="entry" format="1" level="single"/></xsl:variable>
            <xsl:variable name="varColspan"><xsl:value-of select="sum($varNameEND)-sum($varNameST)+sum($varCellcount)"/></xsl:variable>
            <entry>
                <xsl:attribute name="cellNum"><xsl:value-of select="$varColspan"/></xsl:attribute>
                <xsl:apply-templates/>
            </entry>
        </xsl:for-each>
        </tr>
    </xsl:template>

</xsl:stylesheet>

所需产出:

代码语言:javascript
运行
复制
<article>
<floats>
<table>
    <tbody>
        <tr><entry cellNum="1">1</entry><entry cellNum="2">2-5</entry><entry cellNum="6">6-9</entry><entry cellNum="10">10</entry><entry cellNum="11">11-13</entry><entry cellNum="14">14</entry></tr>
        <tr><entry cellNum="1">1</entry><entry cellNum="2">2-5</entry><entry cellNum="6">6-9</entry><entry cellNum="10">10</entry><entry cellNum="11">11-13</entry><entry cellNum="14">14</entry></tr>
    </tbody>
</table>
</floats>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-25 16:28:27

我想你想用

代码语言:javascript
运行
复制
        <xsl:variable name="varNameST" select="sum(preceding-sibling::entry/@namest/number(substring-after(., 'col')))"/>

不过,只有在XSLT2.0中才有可能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26040787

复制
相关文章

相似问题

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