需要使用XSL更改列表元素标记

时间:2017-05-24 04:46:20

标签: xml xslt xslt-2.0

我需要更改列表标记需要在多个列表元素值

我的输入xml文件是:

<ul>
<li>list</li>
<li>following list:</li>
<ul>
<li>pain</li>
<li>Changes</li>
</ul>
<li>exam</li>
</ul>

XSL我用过:

   <xsl:template match="ul">
      <ul>
         <xsl:apply-templates/>
      </ul>
   </xsl:template>

      <xsl:template match="ul/li">
      <li outputclass="List_Bullet">
         <xsl:apply-templates/>
      </li>
   </xsl:template>

      <xsl:template match="ul/ul/li">
      <li outputclass="List_Bullet_2">
         <xsl:apply-templates/>
      </li>
   </xsl:template>

输出我得到:

<ul>
<li outputclass="List_Bullet">list</li>
<li outputclass="List_Bullet">following list:</li>
<ul>
<li outputclass="List_Bullet_2">pain</li>
<li outputclass="List_Bullet_2">Changes</li>
</ul>
<li outputclass="List_Bullet">exam</li>
</ul>

预期输出为:

<ul>
<li outputclass="List_Bullet">list</li>
<li outputclass="List_Bullet">following list:
<ul>
<li outputclass="List_Bullet_2">pain</li>
<li outputclass="List_Bullet_2">Changes</li>
</ul></li>
<li outputclass="List_Bullet">exam</li>
</ul>

第一个项目符号列表项需要在第二个项目符号列表的末尾关闭。请建议我编码。提前致谢

1 个答案:

答案 0 :(得分:1)

在这种情况下,您必须在模板中使用模式属性进行换行。

你可以试试这个:

<xsl:template match="ul">
    <ul>
        <xsl:apply-templates/>
    </ul>
</xsl:template>

<xsl:template match="ul/li">
    <li outputclass="List_Bullet">
        <xsl:apply-templates/>
        <xsl:apply-templates select="following-sibling::*[1][self::ul]" mode="wrap"/>
    </li>
</xsl:template>

<xsl:template match="ul/ul"/>

<xsl:template match="ul" mode="wrap">
    <ul>
        <xsl:apply-templates mode="wrap"/>
    </ul>
</xsl:template>

<xsl:template match="ul/li" mode="wrap">
    <li outputclass="List_Bullet_2">
        <xsl:apply-templates/>
    </li>
</xsl:template>