ProgramingTip

xsl에서 템플릿의 "모드"에 대한 예제를 제공 할 수 있습니까?

bestdevel 2020. 11. 5. 08:23
반응형

xsl에서 템플릿의 "모드"에 대한 예제를 제공 할 수 있습니까?


<xsl:template name="temp_name" mode="mode">

의 의미는 mode무엇입니까? 많은 리소스를 검색했지만 그 예를 없었습니다. 그래서 아무도 예를 들어 설명 할 수 있습니까?


템플릿에 이름과 모드를 모두 제공하는 것은 그다지 의미가 없습니다 .

name속성은 완전히 템플릿을 매료하고 같은 이름과 다른 모드와 두 개의 템플릿이 없습니다.

mode속성을 사용하면 다른 모드를 사용하여 노드를 두 번 이상 처리 할 수 ​​있습니다 .

다음은 간단한 예입니다.

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

 <xsl:template match="num[position() mod 3 = 1]">
  <tr>
    <xsl:apply-templates mode="copy" select=
     ". | following-sibling::*[not(position() >2)]"/>
  </tr>
 </xsl:template>

 <xsl:template match="*" mode="copy">
  <td><xsl:value-of select="."/></td>
 </xsl:template>

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

이 변환이 다음 XML 문서에 적용되는 경우 :

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

그 숫자 결과가 3 개 tr(행) 로 표시되고 각 행에는 3 개 열이 포함됩니다 (마지막 행 제외 가능).

<tr>
   <td>01</td>
   <td>02</td>
   <td>03</td>
</tr>
<tr>
   <td>04</td>
   <td>05</td>
   <td>06</td>
</tr>
<tr>
   <td>07</td>
   <td>08</td>
   <td>09</td>
</tr>
<tr>
   <td>10</td>
</tr>

이 변환에서는 num형식 3*k +1(여기서는 k정수) 으로 표현할 수없는 위치가있는 모든 요소가 본문이 비어있는 템플릿과 일치하므로 처리되지 않습니다.

그러나 우리 num는 행의 셀을 형성해야하는 모든 요소 를 처리하려고합니다 . 이 목적을 위해 xslt 명령을 사용하여 처리합니다.

<xsl:apply-templates mode="copy" select=
 ". | following-sibling::*[not(position() >2)]"/>

즉, "일반적으로 적용되는 (모드 없음) 선택한 노드 템플릿에 적용하지 않고 모드에있는 템플릿을 적용 copy합니다."

따라서 선택한 num요소를 무시하지 않고 copy모드 에서 처리하고tds를 생성합니다 .

템플릿 규칙 :

<xsl:template match="num"/>

xslt 내장 템플릿 (기본 처리)을 재정의하는 데 필요합니다. 그렇지 않으면 num위치를로 나타낼 수없는 노드 의 문자열 값 3*k +1이 출력됩니다.

따라서 이러한 노드는 두 템플릿 모두에서 처리됩니다 .

<xsl:template match="num"/>

<xsl:apply-templates mode="copy" select=
 ". | following-sibling::*[not(position() >2)]"/>

따라서 원하는 결과를 얻습니다.

이러한 템플릿이 어떻게 적용되는지보기 위해 좋은 XSLT 디버거를 사용하는 것이 도움이 될 것 입니다.


<xsl:apply-templates select="phone" />
<xsl:apply-templates select="phone" mode="accountNumber"/>
<xsl:template match="phone">
      <TD>A</TD>
</xsl:template>
<xsl:template match="phone" mode="accountNumber">
      <TD>B</TD>
</xsl:template>

여기에 간단한 예제 링크 : https://msdn.microsoft.com/en-us/library/ms256045%28v=vs.110%29.aspx

참고 URL : https://stackoverflow.com/questions/4486869/can-one-give-me-the-example-for-mode-of-template-in-xsl

반응형