我有一个XML文件,它是从类似的存储过程.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>
有人能帮忙吗?
示例不起作用的一个原因是$Txt
和TT
之间的Column1
。
事后看来,我不确定为什么我在另一个答案中使用递归模板。下面的解决方案会产生相同的结果,而且要简单得多。
<?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>
使用此输入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