2015-01-07 3 views
0

를 기반으로 내부에 다른 템플릿을 템플릿을 적용, 나는 Test_resuts구성 요소을 통해 루프에 있습니다. 구성 요소의 TYPE이 암시 적 이름과 일치하면 해당 구성 요소에 다른 템플리트를 적용해야합니다. 각 구성 요소 유형에 대해 다른 템플리트로 XSL을 생성했습니다. 예 : NORMALTEXTBOX. 그러나 템플릿은 컴포넌트 블록 ...에 적용되지 않습니다. 아무도 나를 도와 줄 수 없습니까?XSLT가 나는 아래 XML이 특성

XML

<Report> 
<Test_Results> 
    <Test_Result TestID="1" TestName="sampleTest" > 
     <Component Type="NORMALTEXTBOX"> 
     <ComponentName>Component1</ComponentName> 
     <ComponentId></ComponentId> 
     <Method></Method> 
     <Results></Results> 
     </Component> 
     <Component Type="NUMERICTEXTBOX"> 
     <ComponentName>Component2</ComponentName> 
     <ComponentId></ComponentId> 
     <Method></Method> 
     <Results></Results> 
     </Component> 
    </Test_Result> 

    <Test_Result TestID="1" TestName=""> 
     <Component Type="NORMALTEXTBOX"> 
     <ComponentName></ComponentName> 
     <ComponentId></ComponentId> 
     <Method></Method> 
     <Results></Results> 
     </Component> 
    </Test_Result> 
</Test_Results> 
</Report> 

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="html" omit-xml-declaration="yes"/> 
     <xsl:template match="/"> 
      <html> 
      <body> 
      <xsl:apply-templates select="Report/Test_Results"/> 
      </body> 
      </html> 
     </xsl:template> 

     <xsl:template match="Test_Results"> 
      <xsl:for-each select="Test_Result"> 
      <xsl:for-each select="Component"> 
       <xsl:choose> 
        <xsl:when test="@Type = 'NORMALTEXTBOX'"> 
        <xsl:apply-templates select="Component" mode="normaltext"/> 
        </xsl:when> 

        <xsl:when test="@Type = 'NUMERICTEXTBOX'"> 
        <xsl:apply-templates select="Component" mode="numerictext"/> 
        </xsl:when> 
       </xsl:choose> 
      </xsl:for-each> 
      </xsl:for-each> 
     </xsl:template> 

     <xsl:template match="Component" mode="normaltext"> 
      <h1> different styles to be applied, only some values of component will be taken</h1> 
     </xsl:template> 

     <xsl:template match="Component" mode="numerictext"> 
      <h1>different styles to be applied, only some values of component will be taken</h1> 
     </xsl:template> 

    </xsl:stylesheet> 

답변

1

xsl:choose에서 문맥 노드 Componentxsl:apply-template 's의 선택 식) (현재해야하기 때문에 :

<xsl:choose> 
<xsl:when test="@Type = 'NORMALTEXTBOX'"> 
    <xsl:apply-templates select="." mode="normaltext"/> 
</xsl:when> 

<xsl:when test="@Type = 'NUMERICTEXTBOX'"> 
    <xsl:apply-templates select="." mode="numerictext"/> 
</xsl:when> 
</xsl:choose> 

그러나하는 이 작업을 수행하는 더 좋은 방법은를 포함시키는 것입니다. 아래 템플릿 경기에서조건 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" omit-xml-declaration="yes"/> 
<xsl:template match="/"> 
    <html> 
     <body> 
      <xsl:apply-templates select="Report/Test_Results"/> 
     </body> 
    </html> 
</xsl:template> 
<xsl:template match="Test_Results"> 
    <xsl:for-each select="Test_Result"> 
     <xsl:apply-templates select="Component"/> 
    </xsl:for-each> 
</xsl:template> 
<xsl:template match="Component[@Type = 'NORMALTEXTBOX']"> 
    <h1> different styles to be applied, only some values of component will be taken</h1> 
</xsl:template> 
<xsl:template match="Component[@Type = 'NUMERICTEXTBOX']"> 
    <h1>different styles to be applied, only some values of component will be taken</h1> 
</xsl:template> 
</xsl:stylesheet> 
+0

귀하의 도움에 감사드립니다. 을 시도했을 때 작동하기 시작했습니다. 나는 당신이 제공 한 솔루션으로 시도 할 것입니다. 감사 :) – Thavudu

0

내가 대신 적용 템플릿의 ... 그것을 firgured 한 나는 아래의 시도 그리고 그 purticular 구성 요소에 대한 템플릿을 적용 할 수 있습니다.

<xsl:call-template name="NORMALTEXTBOX">