使用XSLT从XML获取数据



我有一个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>

有人能帮忙吗?

示例不起作用的一个原因是$TxtTT之间的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> &gt;&gt; </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) &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

相关内容

  • 没有找到相关文章

最新更新