2011-06-24 11 views
6

私のScalaプロジェクトでは、たくさんの従来のXSLTがあり、XSLTをScalaコードに変換する必要があるのだろうかと思っていました。XSLTの代わりにScalaを使用しますか?

ノードにテンプレートを適用するXSLTの手法が好きで、純粋なDOM変換でそれを使用しても問題ありませんが、XML文書内のデータを処理するのに適しているとは思えません。むしろScalaを使ってそれを行います。

ScalaのビルトインXMLサポートとパターンマッチングを考えると、私はそれが良い代替品かもしれないと思っていました。誰もがXSLTスクリプトをScalaに変換しましたか?パターンやベストプラクティスはありますか?

XSLTをScalaソースコードXSLT2srcに変換する古いプロジェクトがありますが、それは長い間休眠していて、XSLT2をサポートしていません。

おかげ

+0

xmlファイルを生成しなかったxsltがたくさんありました。 xsltをscalate + scalaに置き換えるのはかなり簡単で、理解しやすく/開発するのがずっと簡単です。 – Fabian

+1

XML文書内のデータを大量に処理する必要がある場合は、XMLのレイアウトを再設計することをお勧めします。あなたは '持っている場合たとえば、第一、第二、第三は'、これは本当に '' 最初三なければなりません。 XMLファイルは基本的に階層型データベースであり、「任意の1つのフィールドには1つのデータのみが含まれる」ルールが適用されます。 – Flynn1179

+1

私たちが使用するXSLT/XMLでは、ScalaのXMLサポートには少し欠けています。そこにはXPathがもっと必要です(XMLは業界標準で定義されているため変更できません)。 \ and \\はそれをしないが読みやすさが失われたときに "通常の" Scalaに戻ってハッキングすることができます –

答えて

6

それはあなたがどのように変換したい正確に何XML知らずに確実に伝えるのは難しいですが、物事は/マッチXSLTテンプレートをスタンドとしても、より強力でありScalaのXMLパターンマッチング、より読みやすいですいくつかの問題。特に

  • のいずれか不可能か
  • 名前空間を行うことは非常に難しいが

をサポートしていませんされている任意の非自明なマッチングですからにスカラ座からサクソンを呼ぶ方が良いかもしれませんこれらの変換を実行します。

まだ、Scalaのプログラミングのchapter on XMLを参照してください。

最近では、ScalaのビルトインXMLサポートには多くの点で欠けているという意見が多かったです。例えば、 Anti-XMLは、より良いものを構築することを目的としたプロジェクトです。

1

Scales Xmlは、名前空間と属性を直接照合するだけでなく、XPath(文字列ベースの評価と同様に)を処理するための柔軟性の高い内部DSLを提供します。

おそらく変換にとって最も興味深いのは、パスを折りたたみ、XPathで必要なものを選択し、結果を "in place"に変換する能力です。これらの変換ルールは組み合わせることができます。

xsltのアプローチの多くは、ScalesのXPathの直接使用と、xsltと同じように変換/構築することができます。

関連する問題