1

我有一个从存储过程.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>

有人可以帮忙吗?

4

2 回答 2

2

您的示例不起作用的一个原因是Column1between$TxtTT

事后看来,我不确定为什么在其他答案中使用递归模板。以下解决方案产生相同的结果并且更简单。

<?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> &gt;&gt; </xsl:text>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
于 2013-08-21T12:27:00.947 回答
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) &gt; 1">
          <xsl:text> &gt;&gt; </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
于 2013-08-21T11:57:56.623 回答