2

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

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

根据 Google 的说法,有一些努力为 Javascript 添加“xpath 样式”支持,但这些显然并没有很流行。到目前为止,我还没有发现有人在另一种语言中使用“应用模板”方法的任何东西

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

4

5 回答 5

4

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

我不知道任何其他嵌入 XPath 的语言,但 LINQ to XML 有点相似,尤其是在它的VB 语法糖化身中。但是,您可以在 Common Lisp 宏或 D 模板中实现它。

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

没有我知道的主流语言。事实上,这个特性可能是使用 XSLT(而不是例如 XQuery,着眼于密切相关的语言)的主要原因。

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

于 2009-07-17T20:28:59.013 回答
2

XPath 虽然对 XSLT 工作至关重要,但独立于它;libxml 之类的库免费为您提供。您描述的模板应用程序的风格有点棘手;这就是您通常使用 XSLT 的目的。

任何这样做的编程语言都应该是功能性的。您可以尝试编写自己的、不那么冗长的 XSLT 方言;Perl 也可能给你足够的绳索来令人信服地模拟这个特性(尽管性能影响尚不清楚)。

然而,艰难的答案是,这实际上并不存在,除非作为现有语言的库。

于 2009-07-17T20:27:57.983 回答
1

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

对于模板转换,如果您还没有,您应该查看 C# 的LINQ 。这不完全一样,但它允许在没有显式循环的情况下处理对象。

于 2009-07-17T20:28:59.403 回答
1

我没有找到类似的东西。但是为什么有人会使用其他任何东西来转换 XML 呢?一旦您了解了开发解决方案的非程序化方式,XSLT 就可以完美地完成工作。我们的应用程序主要基于 XSLT,它是一个非常强大的工具。

于 2009-07-17T20:36:41.257 回答
1

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

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

XPath 对数据结构做了很多假设。如果要使用它,最好将结构转换为 XML,因为一旦通过某种类似 XPath 的语言使其可遍历,它就会看起来像它,除非您严格限制 XPath 子集。

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

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

于 2009-07-20T15:15:56.463 回答