使用Scala作为XSLT的替代品?

时间:2011-06-24 08:04:12

标签: xml xslt scala

在我的Scala项目中,我们有很多遗留的XSLT,并且想知道我们是否应该将XSLT转换为Scala代码。

我喜欢XSLTs将模板应用到节点的方法,并且很好地将它用于纯粹的DOM转换,但是不认为它非常适合处理XML文档中的数据(难以阅读和测试) - 我宁愿使用Scala来做到这一点。

鉴于Scala内置的XML支持和模式匹配,我认为它可能是一个很好的替代品。有没有人成功将XSLT脚本转换为Scala?是否有任何模式或最佳实践?

我知道有一个旧项目将XSLT转换为名为XSLT2src的Scala源代码,但是它已经处于休眠状态很长时间并且不支持XSLT2。

由于

2 个答案:

答案 0 :(得分:6)

如果不确切知道要转换的XML以及如何转换,很难确定,但事实上,XSLT模板/匹配比Scala XML模式匹配更强大,更易读,后者存在许多问题。< / p>

特别是:

  • 任何不平凡的匹配都是不可能或很难做到的
  • 不支持名称空间

所以你最好从Scala调用Saxon来执行这些转换。

但是,您可能希望查看Scala编程中的chapter on XML

最后,如今流行的观点是Scala内置的XML支持在很多方面都缺乏。参见例如Anti-XML用于旨在改善目标的项目。

答案 1 :(得分:1)

Scales Xml直接提供名称空间和属性的匹配,但也提供了更灵活的内部dsl来处理XPath(以及基于字符串的评估)。

对于转换最有趣的可能是它能够折叠路径,在XPath中选择所需的内容并转换结果“in place”。这些转换规则可以合并。

你仍然可以复制大部分xslt方法,在Scales中使用直接XPath,并像在xslt中那样转换/构建树。