4

XAMLを介した長い学習ループの後、HTMLとjavascriptに戻り、宣言型コードの概念(変換のルールの観点から)が非常に強力な概念であることに気付きました。

構文が豊富であるにもかかわらず、XMLのXSLT処理は宣言型変換プログラミングの要です。ただし、XSLTが日常のタスク(XMLを使用)にどのように使用されるかを理解するのは常に困難です。

HTMLを生成する以外に、プログラミングの問題をエレガントに解決するXSLTの良い例は何ですか?

グラフ変換やデータ再処理が得意だと思います...

編集:私はいくつかの実際の例を望んでいます-完全なxsltを思いとどまらせるものの1つは、コードの視覚的な複雑さです。

4

3 に答える 3

4

特にXSLTが関数型プログラミング言語として使用されている場合、美しいXSLTコードの例を見つけることができます

例については、 FXSL 2.0に関するこの記事( XSLT 2.0 の関数型プログラミング ライブラリ) を参照してください。

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

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

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

この XPath 2.0 式は、「自然数の最大素因数」を定義します。

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はその数そのものです。 pNum が素数の場合、 vDiv1vDiv2が の 2 つの因数であるpNum場合、 の最大素因数は との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>

次に、任意の自然数の MPF を計算できます。たとえば、次のようになります。

f:maxPrimeFactor(600851475143)= 6857

効率に関して言えば、この変換にはわずか 0.109 秒しかかかりません

エレガントで効率的な XSLT コードの他の例:

于 2009-03-29T01:41:44.573 に答える
2

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

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

于 2009-03-28T21:55:08.207 に答える
0

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

見栄えの良い HTML ファイルとして保存できるようにするか、必要に応じてさらに処理できるように XML として保存できるようにするように依頼されました。

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

これは理想的ではありません (XSL なしで HTML を別の場所に移動すると、IE はそれを表示することをまったく拒否します!) が、計画を変更した場合、ユーザーがフォーマットを選択できるように製品を変更するだけで済みます。 HTML を保存する前に、XML に対して XSLT を実行して HTML を取得するだけです。

XML と XSLT を含む自己完結型の HTML ファイルを作成する方法があれば理想的ですが、私はその方法を知りません... それ自体が疑問です。

于 2009-03-28T22:09:53.803 に答える