2009-07-01 4 views
1

XSLT를 사용하여 XML 기반의 선언적 언어를 출력으로 순수한 JavaScript 코드로 변환하려고합니다. 선언적 언어는 Mozilla XUL과 유사한 사용자 인터페이스를 설명하는 데 사용됩니다. XSLT를 처음 접했을뿐 태그에 포함될 수있는 모든 속성을 올바르게 처리하는 방법을 모르겠습니다. 예를 들어, 아래에는 "스크립트"태그와 "버튼"태그가 있으며, 둘 다 다른 속성을 가지며 그 중 많은 것은 선택 사항입니다. 더욱 많은 속성을 가진 추가 태그가 많이 있습니다. 내 질문은, 어떻게 maintainable 방식으로 가능한 모든 특성을 제대로 처리하기 위해 내 XSLT 스크립트를 디자인합니까? XSLT for Declarative Language

<window> 
    <script type="javascript"> 
     blah 
     blah   
    </script> 
    <button id="button1" height="100" vOffset="0" renderer="Test.control.Button" /> 
</window> 

은 아마 같은 일을하는 다른 방법이 많이있다가 다음

<xsl:template match="button">  
    var <xsl:value-of select="@id" /> = new <xsl:value-of select="@renderer" />({   
     id: <xsl:value-of select="@id" />, 
     styles: { 
      <xsl:apply-templates select="@*" />    
     }, 
    }).appendTo(panel); 
</xsl:template> 

<xsl:template match="button/@*"> 
    <xsl:if test="name() = 'height' or name() = 'vOffset'"> 
     &#9;&#9;<xsl:value-of select="name()" />: <xsl:value-of select="." />, 
    </xsl:if> 
</xsl:template> 
+1

당신이 제안하는 것이 효과적 일 수 있습니다. 아무도 * 많은 정보가 없으면 더 잘 말할 수 있는지 모르겠습니다. 귀하의 질문에 대해 구체적으로 설명해 주실 수 있습니까? – annakata

+0

일반적인 생각으로 들여 쓰기없이 JavaScript를 작성하는 것이 좋습니다. 이것은 XSLT 측에서 관리하기가 훨씬 쉬울 것이고, 이후에 일부 라이브러리로 JS를 가장 좋아할 것이라고 확신한다. – Tomalak

+0

들여 쓰기에 관한 좋은 지적. 감사. – Steve

답변

0

같은 initialy 뭔가를 생각했다. 위에 제시된 예제는 매우 선언적인 방법이며, XSLT가 다른 언어와 매우 다른 방식으로 처리 할 수있는 좋은 예입니다.

위의 "버튼"템플릿의 속성을 반복하는 데 사용할 수도 있습니다.

또 다른 대안은 일반적인 스타일 속성 템플릿을 제공하기 위해, 그리고 그것을 다른 모드 줄 수도 : 다른 스타일 속성을 가진 많은 '컨트롤'에 의해

<xsl:template match="button">   
    var <xsl:value-of select="@id" /> = new <xsl:value-of select="@renderer" />({    
     id: <xsl:value-of select="@id" />, 
     styles: { 
      <xsl:apply-templates select="@height | @vOffset" mode="style"/>       
     }, 
    }).appendTo(panel); 
</xsl:template> 

<xsl:template match="@*" mode="style"> 
    &#9;&#9;<xsl:value-of select="name()" />: <xsl:value-of select="." />, 
</xsl:template> 

스타일 템플릿이 때문에 재사용 할 수 있습니다.