如何在XSLT中一次替换相同元素的重复序列?

时间:2017-05-28 20:04:29

标签: xml xslt

目前,我有以下规则:

<xsl:template match="p">  

<xsl:apply-templates/>
</xsl:template>

此规则的目的是替换元素&#34; p&#34;通过新的一行。 但是,如果有几个&#34; p&#34;跟随另一个(例如<p><p><p><p>) 它们应该只转换为一个新行而不是多个新行。在XSLT中是否有任何规范的解决方案?

编辑: 举个例子:

<p> </p>
<p> </p>
<p> </p>
<p> </p>  

应该换成一个换行符。

2 个答案:

答案 0 :(得分:0)

使用轴打印第一个&#39; p&#39;:

<xsl:template match="p">
<xsl:if test="count(preceding-sibling::p) = 0">
<p/>
</xsl:if>
</xsl:template>

答案 1 :(得分:0)

试试这个:

<xsl:template match="p">
   <xsl:if test="not(preceding-sibling::*[1][self::p])">
      <xsl:for-each-group select="., following-sibling::*" group-adjacent="boolean(self::p)">
         <xsl:if test="position() eq 1">&#xA;</xsl:if>
      </xsl:for-each-group>
   </xsl:if>
</xsl:template>