XSLT에서 선택한 내부에서 정의 된 변수 재사용 변수 재사용

StackOverflow https://stackoverflow.com/questions/1410069

  •  05-07-2019
  •  | 
  •  

문제

나는 이것과 유사한 코드가 있습니다.

<xsl:choose>
   <xsl:when test="some_test">   
      <xsl:value-of select="Something" />
      You are:
      <xsl:variable name="age">12</xsl:variable>
      years
   </xsl:when>
</xsl:choose>

내 문제는 선택 이외의 변수 $ 연령을 사용하고 싶다는 것입니다. 어떻게해야하나요?

비슷한 문제는 XSLT 파일에 여러 템플릿이 있고 그 중 하나가 기본 템플릿이라는 것입니다. 이 하나:

<xsl:template match="/">
</xsl:template>

이 템플릿 내부에서 다른 템플릿을 호출하고 다시 다른 템플릿의 일부 변수를 사용하고 싶습니다.

예를 들어이 코드가있는 경우 :

<xsl:template match="/">
   <xsl:call-template name="search">
   </xsl:call-template>
</xsl:template>

<xsl:template name="search">
   <xsl:variable name="searchVar">Something...</xsl:variable>
</xsl:template>

그런 다음 메인 테em 플레이트 내부에서 $ SearchVar를 사용하고 싶습니다.

그것은 내가 생각하는 것과 같은 종류의 문제이지만, 나는 이것을 알아낼 수없는 것 같습니다.

그리고 나는 Umbraco를 내 CMS로 실행합니다. :)

여러분 중 일부가 답을 갖기를 바랍니다.

감사합니다 - 김

도움이 되었습니까?

해결책

#1 : 변수는 부모 요소 내에서만 유효합니다. 즉, 논리를 넣어야합니다 내부에 "주변"대신 변수 :

<xsl:variable name="var">
  <xsl:choose>
    <xsl:when test="some_test">
      <xsl:text>HEY!</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>SEE YA!</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

#2 : 매개 변수를 사용하여 값을 템플릿으로 전송합니다.

<xsl:template match="/">
  <xsl:variable name="var" select="'something'" />

  <!-- params work for named templates.. -->
  <xsl:call-template name="search">
    <xsl:with-param name="p" select="$var" />
  </xsl:call-template>

  <!-- ...and for normal templates as well -->
  <xsl:apply-templates select="xpath/to/nodes">
    <xsl:with-param name="p" select="$var" />
  </xsl:apply-templates>
</xsl:template>

<!-- named template -->
<xsl:template name="search">
  <xsl:param name="p" />

  <!-- does stuff with $p -->
</xsl:template>

<-- normal template -->
<xsl:template match="nodes">
  <xsl:param name="p" />

  <!-- does stuff with $p -->
</xsl:template>

값을 호출 템플릿으로 전송하려면 위의 사항을 결합하십시오.

<xsl:template match="/">
  <xsl:variable name="var">
    <xsl:call-template name="age">
      <xsl:with-param name="num" select="28" />
    </xsl:call-template>
  </xsl:variable>

  <xsl:value-of select="$var" />
</xsl:template>

<xsl:template name="age">
  <xsl:param name="num" />

  <xsl:value-of select="concat('You are ', $num, ' years yold!')" />
</xsl:template>

다른 팁

살펴보십시오 XSL : PARAM.

편집하다: 테스트되지 않았지만 작동 할 수 있습니다.

<xsl:param name="var">
  <xsl:choose>
   <xsl:when test="some_test">   
     <xsl:value-of select="string('HEY!')" />
   </xsl:when>
  </xsl:choose>
</xsl:param>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top