HTML链接的XSL分隔值及其描述

时间:2014-01-03 17:19:08

标签: html xml api xslt asp-classic

我正在尝试调试一些xsl代码,这些代码将从XML Document收集的链接及其描述放在列表中,它似乎正在工作,除非处理从单个字符串收集的多个链接,这些链接用“|”分隔和“^”符号。

包含此代码的XML Line与此非常相似:

<WebContent>
    <content_type_desc>Links</content_type_desc>
       <content_value>Google|http://www.google.com^Yahoo|http://www.yahoo.com^Bing|Http://www.bing.com</content_value>
</WebContent>

处理此问题的xsl就像

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns="http://www.w3.org/1999/xhtml">
    <xsl:output method="html" indent="yes" encoding="utf-8"/>
    <xsl:template match="/">
    <!--Links-->
    <xsl:variable name="links" select="//WebContent[content_type_desc='Links']/content_value "/>
    <!--Links-->

                <!--Links section-->
                <xsl:if test="$links != ''">
                    <br />
                    <xsl:choose>
                        <xsl:when test="contains($links,'^')">
                            <xsl:variable name="URL" select="substring-after(substring-before($links,'^'),'|')"/>
                            <xsl:variable name="URLText" select="substring-before($links,'|')"/>
                            <strong>Links: </strong><br />
                            <a href="$URL" target="_blank"><xsl:value-of select="$URLText"/></a>
                            <br />
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:variable name="URL" select="substring-after($links,'|')"/>
                            <xsl:variable name="URLText" select="substring-before($links,'|')"/>
                            <strong>Links: </strong><br />
                            <a href="{$URL}" target="_blank"><xsl:value-of select="$URLText"/></a>
                            <br />
                        </xsl:otherwise>
                    </xsl:choose>
                    <br />

                </xsl:if>
                <!--Links section-->
    </xsl:template>
    </xsl:stylesheet>

这有什么问题,它只输出

<a href="http://www.google.com>Google</a>

当我希望输出

<a href="http://www.google.com>Google</a>
<a href="http://www.yahoo.com>Yahoo</a>
<a href="http://www.bing.com>Bing</a>

任何帮助将不胜感激,因为这让我完全难过。

2 个答案:

答案 0 :(得分:2)

假设您实际上只使用XSLT 1.0,为了解决这个问题,您可以使用递归调用的命名模板。

目前,代码仅处理代码中第一个^之前的URL。您可以做的是将检查链接变量的主要代码放在命名模板中。然后,在URL确实包含^时运行的 xsl:when 条件中,添加对命名模板的递归调用,但仅传递{{1}之后的子字符串}。

试试这个XSLT

^

答案 1 :(得分:0)

鉴于您已将问题标记为经典ASP,您的XSLT处理器很可能是某些版本的MSXML,其中有http://www.exslt.org/str/functions/tokenize/index.html的实现,因此您可以使用它。