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

Xml 需要使用XSL更改列表元素标记,xml,xslt,xslt-2.0,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:te

我需要更改列表标记,它需要位于多个列表元素值之下

我的输入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>
输出Im获取为:

<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>

第一个项目符号列表项需要在第二个项目符号列表的末尾关闭。请告诉我编码。在此情况下,您必须使用模板中的模式属性进行包装

您可以尝试以下方法:

<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>