背景:放弃了XSLT作为我的编程工具包的一部分的实际日常使用,我想知道是否有任何其他语言的实现(仅)我想念的两件事关于那个工具:
根据Google的说法,有一些努力可以为Javascript添加“xpath风格”支持,但这些支持并没有明显受到影响。到目前为止,我还没有找到任何,其中某人使用另一种语言的“apply-templates”方法
问题:有没有人知道一种编程语言(希望是一种主流)从XSLT中窃取这两个好主意,或者使用不同的方法应用相同或类似的概念?
答案 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#具有XPathNavigator和SelectNodes。如果要将XPath用于对象层次结构,请查看JXPath。
对于模板转换,如果您还没有,请查看C#的LINQ。它不完全相同,但它允许处理对象而无需显式循环。
答案 3 :(得分:1)
我没有发现这样的事情。但是为什么有人会使用其他任何东西来转换XML?一旦理解了开发解决方案的非过程方式,XSLT就能完美地完成工作。我们的应用程序主要基于XSLT,它是一个非常强大的工具。
答案 4 :(得分:1)
对您的第一个要求发表评论:
- 使用“路径”样式通过xpath
遍历数据结构的能力
XPath对数据结构做了很多假设。如果你打算使用它,你也可以将你的结构转换为XML,因为除非你严格限制你的XPath子集,否则一旦你通过类似XPath的语言使它可以遍历它就会看起来像它。
另外,请记住,您缺少的“仅两件事”,XPath和模板处理,实际上是构成Xslt的重要组成部分。我很好奇为什么你决定把它从你的工具带上取下来。
尽管你想要一个Xslt替代品,我仍然会特别推荐Xslt和Xslt 2.0。添加unparsed-text和analyze-string后,您就拥有了强大的文本处理语言。例如,查看CSV to XML样式表。尽管JSON不是常规的,但您仍然可以使用递归模板将简单的JSON写入XML转换器并随意转换结果。