XSL 转换后面的组元素



这是我在XML中拥有的内容:

      <par level="4">Hi </par>
      <par level="4">There!</par>
      <par level="12">abcd :</par>
      <par level="12">efgh .</par>
      <par level="4">azert</par>
      <par level="4">yuio</par>
      <par level="4">p</par>
      <par level="4">)</par>

当我读取 PAR 元素时,我想在同一个 DIV 中连接内容,直到 LEVEL 属性仍然与前一个属性相同。但是如果级别发生变化,我需要创建一个新的 DIV。内容顺序不必更改,因此第一个"级别 4"PAR 不必与第二个合并。 除了我提到的最后一点之外,我看到了类似的问题。

所以这是我在上述示例的 xsl 转换后想要的:(XSLT 1.0)

      <div class="level4">
        Hi there!
      </div>
      <div class="level12">
        abcd :efgh .
      </div>          
      <div class="level4">
        azertyuiop)
      </div>

我已经有一个模板xsl:template match="par">里面有很多代码。您有什么建议来实现这一点?

你可以做这样的事情:

XML 输入(修改为格式正确)

<doc>
    <par level="4">Hi </par>
    <par level="4">There!</par>
    <par level="12">abcd :</par>
    <par level="12">efgh .</par>
    <par level="4">azert</par>
    <par level="4">yuio</par>
    <par level="4">p</par>
    <par level="4">)</par>
</doc>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="par[not(@level = preceding-sibling::par[1]/@level)]">
        <div class="level{@level}">
            <xsl:value-of select="."/>      
            <xsl:apply-templates select="(following-sibling::par[1])[@level=@level]" mode="dump"/>      
        </div>
    </xsl:template>
    <xsl:template match="par[preceding-sibling::par[1]/@level=@level]"/>
    <xsl:template match="par" mode="dump">
        <xsl:value-of select="."/>
        <xsl:if test="following-sibling::par[1]/@level = @level">
            <xsl:apply-templates select="following-sibling::par[1]" mode="dump"/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出

<doc>
   <div class="level4">Hi There!</div>
   <div class="level12">abcd :efgh .</div>
   <div class="level4">azertyuiop)</div>
</doc>

相关内容

  • 没有找到相关文章