XSLT在其他语言中的两个概念:apply-templates和xpath

时间:2009-07-17 20:04:39

标签: xslt xpath templating apply-templates

背景:放弃了XSLT作为我的编程工具包的一部分的实际日常使用,我想知道是否有任何其他语言的实现(仅)我想念的两件事关于那个工具:

  • 使用“路径”样式通过xpath
  • 遍历数据结构的能力
  • 使用apply-templates而不是通过迭代或“循环”方法遍历模板转换的能力。

根据Google的说法,有一些努力可以为Javascript添加“xpath风格”支持,但这些支持并没有明显受到影响。到目前为止,我还没有找到任何,其中某人使用另一种语言的“apply-templates”方法

问题:有没有人知道一种编程语言(希望是一种主流)从XSLT中窃取这两个好主意,或者使用不同的方法应用相同或类似的概念?

5 个答案:

答案 0 :(得分:4)

  

使用“路径”样式通过xpath

遍历数据结构的能力

我不知道嵌入XPath的任何其他语言,但LINQ to XML有点类似,特别是在其VB syntactic sugar版本中。但是,您可以在Common Lisp宏或D模板中实现它。

  

使用apply-templates而不是通过迭代或“循环”方法遍历模板转换的能力。

我不知道主流语言。实际上,这个功能可能是使用XSLT的主要原因(而不是例如XQuery,查看密切相关的语言)。

它可以在任意条件下对接收器进行有效的可扩展动态调度 - 因此,我认为你可以在Common Lisp中做到这一点(CLOS,具体而言) - 如果我没记错的话,它的多方法可以匹配任意条件,所以如果你有一个XPath模式评估器,你可以用它来模拟apply-templates,甚至更多 - 因为apply-templates只调度一个参数,而CLOS multimethods调度多个参数。

答案 1 :(得分:2)

XPath虽然对于使XSLT工作至关重要,但却与之无关;像libxml这样的库可以免费提供给你。您描述的模板应用程序的样式有点棘手;这就是你通常使用的XSLT。

任何执行此操作的编程语言都应该起作用。您可以尝试编写自己的,不那么详细的XSLT方言; Perl也可以给你足够的绳索来令人信服地模仿这个功能(尽管性能影响尚不清楚)。

但是,最难的答案是,除了作为现有语言的库之外,这并不存在。

答案 2 :(得分:1)

对于XPath,绝对是。对于C,Xalan-C++,对于Java javax.xml.xpath(具有多个实现),C#具有XPathNavigatorSelectNodes。如果要将XPath用于对象层次结构,请查看JXPath

对于模板转换,如果您还没有,请查看C#的LINQ。它不完全相同,但它允许处理对象而无需显式循环。

答案 3 :(得分:1)

我没有发现这样的事情。但是为什么有人会使用其他任何东西来转换XML?一旦理解了开发解决方案的非过程方式,XSLT就能完美地完成工作。我们的应用程序主要基于XSLT,它是一个非常强大的工具。

答案 4 :(得分:1)

对您的第一个要求发表评论:

  
      
  • 使用“路径”样式通过xpath
  • 遍历数据结构的能力   

XPath对数据结构做了很多假设。如果你打算使用它,你也可以将你的结构转换为XML,因为除非你严格限制你的XPath子集,否则一旦你通过类似XPath的语言使它可以遍历它就会看起来像它。

另外,请记住,您缺少的“仅两件事”,XPath和模板处理,实际上是构成Xslt的重要组成部分。我很好奇为什么你决定把它从你的工具带上取下来。

尽管你想要一个Xslt替代品,我仍然会特别推荐Xslt和Xslt 2.0。添加unparsed-textanalyze-string后,您就拥有了强大的文本处理语言。例如,查看CSV to XML样式表。尽管JSON不是常规的,但您仍然可以使用递归模板将简单的JSON写入XML转换器并随意转换结果。