2009-03-28 13 views
4

XAMLによる長い学習ループの後、私はHTMLとjavascriptに戻ってきました。そして、宣言型コードのコンセプトは、変換のルールの点では信じられないほど強力な概念です。xsltの優雅な例?

XMLのXSLT処理は、宣言型変換プログラミングの要点です。しかし、私はXSLTが(XMLを使って)毎日の仕事にどのように使われるのかを理解するのは難しいと常に思っていました。

HTMLを生成する以外に、プログラミング上の問題を優雅に解決するXSLTの良い例は何ですか?私はそれがグラフ変換とデータ再処理で良いことだ推測している

...

編集:私はいくつかの実際の例については、望んでいる - 私を置くものの一つフルにXSLT視覚的な複雑さでありますコードの

+0

私の答えでは、このような実際の例が10件あります。コードの複雑さについては、Maximum Primeの要素の例を考えてみましょう:単純なコード実装を見つけようとするのですか? –

+0

Dimitre、あなたの答えは確かに良いです! –

答えて

4

特に、XSLTが関数プログラミング言語として使用されている場合、美しいXSLTコードの例がよく見受けられます。

たとえば、this articleFXSL 2.0) - XSLT 2.0のFunctional Programmingライブラリを参照してください。

FP言語としてXSLTもdeclarative languageです。これは、とりわけ、宣言し、既存の関係を指定することを意味します。

このようなの定義には、結果を生成するための追加コードは必要ありません。それ自体は独自の実装、実行可能な定義または実行可能な仕様です。

ここには小さな例があります。

このXPath 2.0の式は "自然数の最大Prime Factor" 定義:数pNumの最大素因数であり、英語でそれを発音

if(f:isPrime($pNum)) 
    then $pNum 
    else 
    for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))), 
     $vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1], 
     $vDiv2 in $pNum idiv $vDiv1 
     return 
     max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2))) 

を数値そのもの、pNumが素数ならば、そうでなければvDiv1vDiv2pNumの二つの要因であり、次いでpNumの最大素因数はvDiv1vDiv2の最大素因数の大きいです。

XSLTの最大プライムファクタを実際に計算するにはどうすればよいですか? の定義を<xsl:function>にまとめれば、結果は得られます!

<xsl:function name="f:maxPrimeFactor" as="xs:integer"> 
    <xsl:param name="pNum" as="xs:integer"/> 

    <xsl:sequence select= 
    "if(f:isPrime($pNum)) 
     then $pNum 
     else 
     for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))), 
      $vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1], 
      $vDiv2 in $pNum idiv $vDiv1 
      return 
      max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2))) 
    "/> 
</xsl:function> 

我々は、次に、calculate the MPF for any natural numberは、例えばすることができる:効率として

f:maxPrimeFactor(600851475143) = 6857

、ウェル、この変換はわずか0.109秒をとります。両方ellegantかつ効率的なXSLTコード

他の例:

+0

うわー...それはたくさんのBOLDです:-) – Stimul8d

+0

@ Stimul8d:はい、XSLTはエレガントなFP言語になっています。 –

2

コード生成はどうですか? protobuf-netで.protoモデル(xmlとしてエクスポート)から.csファイルを作成するにはlike soを使用します。 .NET 4.0では、T4テンプレートがより明白な選択肢になりますが、T4エンジンはそれ以前にはスタンドアロン(AFAIK)ではありません。

Xsltは、さまざまなxmlレイアウト間で変換するためにも広く使用されています(たとえば、biztalkなどのミドルウェアツールなど)。

0

先日、XSLTを使用しました。私は、ツリーコントロールの内容をファイルに保存して上司に電子メールで送信し、孫に表示できるようにする必要がありました。

保存できるように要求されましたそれをHTMLファイルとして見せてくれたり、XMLとして見せたりすることができました。

私はXSLTにリンクされたXMLを出力することを提案しました。そのため、生のXMLを持つようになりましたが、ブラウザで開いたときに見栄えがよくなりました。

これは理想的ではありません(XSLを使わずにHTMLをどこか別の場所に移動すると、IEはそれを表示しません)。私たちが計画を変更した場合、ユーザーがフォーマットを選択できるように、彼らがHTMLを選択した場合、私はそれを保存する前にHTMLを取得するためにXML上でXSLTを実行するだけです。

理想的には、XMLとXSLTを含む自己完結型のHTMLファイルを作成する方法がありますが、私はそれを認識していません。これは問題です。

関連する問題