2013-08-21 3 views
1

У меня есть XML-файл, получая от результата сохраненного файла procedure.xml какПолучить данные из XML с помощью XSLT

<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 

Я пытался что-то вроде this..but не получил

<xsl:for-each select="$Txt/Column1/TT"> 
      <xsl:value-of select="."/> 
       </xsl:for-each> 

Любой может помочь?

ответ

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

</xsl:stylesheet> 
Смежные вопросы