【问题标题】:XSLT to wrap XML data in html tagsXSLT 将 XML 数据包装在 html 标记中
【发布时间】:2017-03-01 06:57:04
【问题描述】:

我有一个 XML 节点,其中包含要转换为无序列表的数据。像这样:

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

我首先尝试使用应用于数据的递归字符串替换模板,但我无法将结尾包裹在&lt;/li&gt; 标记中。

【问题讨论】:

    标签: html xml xslt xslt-1.0


    【解决方案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>
    

    【讨论】:

    • 谢谢,这是一个非常好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多