2017-03-01 40 views
1

我有一个XML节点,其中包含我想要变成无序列表的数据。像这样:用于将html数据包装到html标签中的XSLT

<list><![CDATA[*Lorem ipsumdolor sit *consectetur adipiscing elit, * sed do eiusmod * tempor incididunt ut]]></list> 

我想分开星号上的列表元素。

所以输出将是:

<ul> 
    <li>Lorem ipsumdolor sit</li> 
    <li>consectetur adipiscing elit,</li> 
    <li>sed do eiusmod</li> 
    <li>tempor incididunt ut</li> 
</ul> 

我第一次使用递归字符串替换应用于数据模板试过,但我遇到了麻烦包裹结束了在</li>标签。

回答

1

试试这个

<xsl:template match="list"> 
    <ul> 
     <xsl:call-template name="li"> 
      <xsl:with-param name="listdata" select="string(.)"/> 
     </xsl:call-template> 
    </ul> 
</xsl:template> 

<xsl:template name="li"> 
    <xsl:param name="listdata"/> 
    <xsl:variable name="lidata"> 
     <xsl:choose> 
      <xsl:when test="contains($listdata, '*')"> 
       <xsl:value-of select="normalize-space(substring-before($listdata, '*'))"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="normalize-space($listdata)"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 
    <xsl:variable name="lidataremaindata" select="normalize-space(substring-after($listdata, '*'))"/> 
    <xsl:if test="normalize-space($lidata) != ''"> 
    <li> 
     <xsl:value-of select="$lidata"/> 
    </li> 
    </xsl:if> 
    <xsl:if test="normalize-space($lidataremaindata) != ''"> 
     <xsl:call-template name="li"> 
      <xsl:with-param name="listdata" select="$lidataremaindata"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
+0

谢谢,这是一个非常好的解决方案。 –