【问题标题】:xslt for-each apply-templates troublesxslt for-each 应用模板的麻烦
【发布时间】:2010-11-11 00:27:12
【问题描述】:
<xsl:for-each select="c:richBody">
        <xsl:if test="position()=1">
          <div style="height:50px;" />
        </xsl:if>
        <xsl:apply-templates />
</xsl:for-each>

我有上面的代码简介,需要在第一个 c:richBody 元素和第二个 c:richBody 之间做一些事情。看起来当它开始应用模板时,它只是遍历所有模板,然后进入文档。将我所拥有的高度 50 div 置于所有应用模板之上。

有什么方法可以在应用模板的项目之间做点什么吗?

【问题讨论】:

  • &lt;xsl:if&gt; 中您打算测试第一个还是第二个c:richBody
  • 如果您显示更多样式表可能会有所帮助,例如包含 for-each 的整个 xsl:template;一些输入 XML 也会很有用。

标签: xml xslt


【解决方案1】:

我相信您的问题是您正在考虑“C”,其中第一项具有 position()=0;第二个有 position()=1 ...

但是,对于 XSLT,您必须像一个理智的人一样思考。第一项的位置()= 1。要在第二项之前插入您的 div,您的测试应该是 if test="position()=2"

【讨论】:

    【解决方案2】:

    作为猜测,我会说你想要

    <xsl:if test="position()>1">
    

    这将在所有 c:richBody 标签之间为您提供一个 div。

    【讨论】:

    • 我回避在 XPath 表达式中使用 &lt;&gt;,因为我永远记不起是哪一个使解析器卡住了。我将在这样的实例中使用position() != 1,因为它永远不会小于 1。
    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多