2009-07-01 19 views
1

XMLベースの宣言言語を純粋なJavaScriptコードに変換するためにXSLTを使用しています。宣言型言語は、Mozilla XULに似たユーザインタフェースの記述に使用されます。私はXSLTについてかなり新しく、タグに含めることができるすべての属性を適切に処理する方法がわかりません。例えば、私は下に、 "script"タグと "button"タグを持っています。どちらも属性が異なり、その多くはオプションです。さらに多くの属性を持つ追加のタグが多数あります。私の質問は、メンテナンス可能な方法で可能なすべての属性を適切に処理するために、XSLTスクリプトをどのように設計するのですか?宣言的言語のXSLT

<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

同じことをやってのさまざまな方法の多くは、おそらくありのようで初期状態に何かを考えていました。上記の例は非常に宣言的なメソッドであり、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> 

スタイルテンプレートは、したがって、再利用することができます。

関連する問題