2009-07-01 64 views
1

我正在研究如何使用XSLT將基於XML的聲明性語言轉換爲純JavaScript代碼作爲其輸出。聲明性語言將用於描述類似於Mozilla XUL的用戶界面。我對XSLT相當陌生,我不確定如何正確處理標籤可以包含的所有屬性。例如,下面我有一個「腳本」標記和一個「按鈕」標記,它們都具有不同的屬性,其中許多屬性是可選的。還會有更多屬性更多的附加標籤。我的問題是,如何設計我的XSLT腳本,以便以可維護的方式正確處理所有可能的屬性?聲明性語言的XSLT

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

我想initialy像下面

<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 2009-07-01 11:22:34

回答

0

可能有大量的做同樣的事情不同的方式。你在上面給出的例子是一個非常明確的方法,也是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> 

樣式模板,因此可以重複使用許多不同的樣式屬性「控制」。