我有一个XML文件来自存储过程文件的结果,如
<filters><TT TXT1="Electronics" /><TT TXT1="Computer" /><TT TXT1="HP" /></filters>
我通过XSLT中的存储过程得到这个
<xsl:variable name="p" select="get:GetProductFromId(get:UrlInformation()//productid)" />
<xsl:text>» </xsl:text>
<xsl:variable name="Breadcrumb" select="get:ExecStoredProcedure('kt_Brdcrumb',concat('@Dcat:',$p//defaultcategory))"></xsl:variable>
<xsl:variable name="Txt" select="XSLTHelper:FiltersToXML($Breadcrumb)">
</xsl:variable>
我需要以下面的格式打印XML中的获取数据
Electronics >> Computer >> HP
我试过这样的事情但是没有得到
<xsl:for-each select="$Txt/Column1/TT">
<xsl:value-of select="."/>
</xsl:for-each>
有人可以帮忙吗?
答案 0 :(得分:2)
您的示例不起作用的一个原因是Column1
和$Txt
之间的TT
。
事后看来,我不确定为什么我在其他答案中使用了递归模板。以下解决方案产生相同的结果,并且更加简单。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="filters">
<xsl:apply-templates select="TT"/>
</xsl:template>
<xsl:template match="TT">
<xsl:value-of select="@TXT1"/>
<xsl:if test="position() != last()">
<xsl:text> >> </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
使用此输入XML:
<filters>
<TT TXT1="Electronics" />
<TT TXT1="Computer" />
<TT TXT1="HP" />
</filters>
以下XSL样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="filters">
<xsl:call-template name="print">
<xsl:with-param name="items" select="TT"/>
</xsl:call-template>
</xsl:template>
<!-- This template uses recursion on the list of TT elements to print them
one-by-one, treating the last one differently. -->
<xsl:template name="print">
<xsl:param name="items"/>
<xsl:choose>
<!-- Check that we have some items to print. -->
<xsl:when test="not($items)"/>
<xsl:otherwise>
<xsl:value-of select="$items/@TXT1"/>
<!-- If we haven't reached the last one yet, print a couple of
greater-than signs and keep going. -->
<xsl:if test="count($items) > 1">
<xsl:text> >> </xsl:text>
<xsl:call-template name="print">
<xsl:with-param name="items" select="$items[not(position()=1)]"/>
</xsl:call-template>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
生成此输出文本:
Electronics >> Computer >> HP