根据位置()更改div标签的属性



我正在尝试解析一个xml,我需要根据位置()单独更改div标签的属性。正如您在下面看到的,我已经为父div 使用了应用模板。如何在应用模板中仅应用第一个div 的条件?

<div class="maintitle">
  <xsl:apply-templates select="title"/>
</div>
<xsl:template match="title">
  <h3 class="sub title">
    <span>
      <a href="............"></a>
    </span>
  </h3>
  <div class="slide">
    <!-- ... html chunk ... -->
  </div>
</xsl:template>

但是对于应用模板中的第一个div 应该作为

 <h3 class="sub title">
   <span>
     <a href="............"></a>
   </span>
 </h3>
 <div class="first slide">
   <!-- ... html chunk ... -->
 </div>

由于您尚未显示输入的外观,因此任何答案都将涉及一些猜测。

但通常,有两种方法可以使 XSLT 以不同于其他方式处理序列的第一个元素。

首先,您可以创建两个不同的模板,一个用于第一个title元素,另一个用于其他元素:

<xsl:template match="title">
  <!--* handling for most title elements *-->
</
<xsl:template match="title[1]">
  <!--* handling for the first title *-->
</

在这种情况下,这可能涉及比人们想要的更多的模板代码重复。

其次,您可以使用条件将相关代码括起来。 在这里,使用 XSL 属性构造函数而不是文本结果属性将简化事情:

<xsl:template match="title">
  <h3 class="sub title">
    <span>
      <a href="............"></a>
    </span>
  </h3>
  <div>
    <xsl:attribute name="class">
      <xsl:if test="position() = 1">
        <xsl:text>first</xsl:text>
      </xsl:if>
      <xsl:text> slide</xsl:text>
    </xsl:attribute>
    <!-- ... html chunk ... -->
  </div>
</xsl:template>

这些假设:

  • 输入中的每个title元素都会在输出中变成一张幻灯片;
  • title元素是兄弟姐妹;
  • title元素不与其他类型的元素混合。

如果这些假设不成立,则编写match模式或test条件的方式将与显示的不同。

相关内容

  • 没有找到相关文章

最新更新