2016-10-29 4 views
2

딥 레벨 매개 변수에는 목록 값을 입력하지만 지정된 매개 변수 만 시도합니다. 각 테스트 ID에 대해 706 번호를 사용합니다. 실제로 각 값과 목록 값 이름에 대해 수행합니다. 값 사이에 세미콜론도 필요하지만 시작과 끝에서는 세미콜론이 필요하지 않습니다.지정된 ID에 대한 각 목록 값의 XSLT

XML :

<parameters> 
<section id="27" name="Parametry produktu"/> 
<parameter id="23" name="kolor"> 
    <value id="42" name="jasny róż"/> 
</parameter> 
<parameter id="25" name="skład"> 
    <value id="43" name="97% bawełna, 3% poliamid"/> 
</parameter> 
<parameter id="706" name="rozmiar (ukryć)""> 
    <value id="717" name="46"/> 
    <value id="718" name="47"/> 
    <value id="719" name="48"/> 
</parameter> 
<parameter id="142" name="płeć (ukryć)"> 
    <value id="746" name="ona"/> 
</parameter> 
</parameters> 

XSLT :

<sizes3>jasny róż; 97% bawełna, 3% poliamid;46; ona;</sizes3> 

하지만 난이 필요합니다 :

   <sizes3> 
      <xsl:for-each select="parameters"> 
      <xsl:if test="parameter/@id = 706"> 
      <xsl:for-each select="parameter"> 
       <xsl:choose> 
       <xsl:when test="position() = 1"> 
       <xsl:value-of select="value/@name" /> 
       </xsl:when> 
       <xsl:otherwise> 
       <xsl:value-of select="concat('; ', value/@name)" />     
       </xsl:otherwise> 
       </xsl:choose> 
      </xsl:for-each>          
      </xsl:if> 
      </xsl:for-each>    
     </sizes3> 

결과가

<sizes3>46;47;48</sizes3> 

답변

0

여기 하나 개의 방법 :

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/parameters"> 
    <!-- other stuff ? --> 
    <sizes3> 
     <xsl:for-each select="parameter[@id=706]/value"> 
      <xsl:value-of select="@name" /> 
      <xsl:if test="position()!=last()"> 
       <xsl:text>;</xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
    </sizes3> 
    <!-- more stuff ? --> 
</xsl:template> 

</xsl:stylesheet> 
0

간단한, 짧은, 아니 <xsl:for-each>, 더 XSLT 조건 연산자하지 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*"/> 

    <xsl:template match="/"> 
    <size3><xsl:apply-templates/></size3> 
    </xsl:template> 

    <xsl:template match="parameter[@id=706]/value"> 
    <xsl:apply-templates select="@name"/> 
    </xsl:template> 

    <xsl:template match="parameter[@id=706]/value[position() > 1]" priority="2"> 
    <xsl:text>;</xsl:text><xsl:apply-templates select="@name"/> 
    </xsl:template> 
</xsl:stylesheet> 
관련 문제