是否有使用,学习或推荐XSLT的充分理由?[关闭]


28

我是过去8年的开发人员。我们主要使用XSLT将XML转换为HTML。我们还将它用于XML到XML的转换。

但是我们现在可以替代所有东西。可以通过诸如ASP.Net之类的编程语言轻松地创建HTML。可以使用任何标准的高级语言来读取和处理XML。由于XSLT中的编程有些复杂,因此任何人都希望使用最新的编程语言。

现在我的问题是:如果不考虑维护已经开发的XSLT的事实,XSLT将来会是一个重要的选择吗?我可以推荐新的程序员学习XSLT吗?


3
相关阅读:有害.cat
Josh K,

12
对我来说,XSLT是一种可怕的隐秘编程语言,但它却拒绝成为一种编程语言。它与纯函数式编程语言有关,但是可读性差,可维护性差,实用性差。因为这是一种拒绝使用的编程语言,所以USERS DocBook(使用XSLT语言编写的复杂软件)之类的用户就存在集成各种解释器,检查器,库等以使<expletive Deleted>正常工作的问题。
Steve314 2011年

8
不是<expletive deleted="true" />
MSalters 2011年

6
@ Steve314我喜欢XSLT,您可以做一些有趣的事情,例如动态SQL->动态XML->动态
XSLT-

5
@MSalters-您已经错过了xml声明,根元素,名称空间,DTD,XML Schema模式或Relax NG模式(或两者),以及XMLPath表达式,它们说明了从中删除该删除项的位置。 。
Steve314

Answers:


29

在某些重要情况下,XSLT可能是一个不错的选择:

  • ETL(提取,转换,加载)软件在某些情况下可以使用XSLT。例如,当提取的数据和要加载的数据都为XML格式,并且可以在无需重新编译应用程序的情况下更改转换的位置时,这可能是一个不错的选择。

  • 一些将数据存储为XML的应用程序使用XSLT以人类可读的格式显示此数据¹。例如,Windows Live Messenger将消息的踪迹存储为XML,但是当您在WLM本身中打开历史记录时,它将显示一个漂亮的表,实际上是通过XSLT构建的HTML。

  • 如果打算以编程方式使用网站的页面,则某些面向开发人员或面向数据的网站可能希望提供对XML的访问权限²。这比使用HTML解析器更好,尤其是因为HTML代码可以随时更改。

  • XSLT在网站上使用时,允许严格区分HTML和后台代码,从而可以雇用一名代码后台开发人员和另一名HTML / CSS内容开发人员。请参阅我对另一个问题的回答中的第1点。

XSLT将来会是一个重要的选择吗?好吧,今天这不是一个重要的选择,我怀疑XSLT的使用会随着时间的推移而增加。我忽略了这个原因,但是许多开发人员不喜欢XML而讨厌XSLT。

您可以推荐新的程序员来学习XSLT吗?当然!不仅XSLT可以在某些情况下使用其他方法会变得更加困难,而且XSLT拥有一种其他语言所没有的非常特定的方法。


¹这就是说XML并不是人类真正可读的:如果您要求不从事IT工作的人阅读XML,他会感到恐惧。
²我知道有网络服务。但是有时候,在每个页面上构造一个动态对象,然后将其序列化为XML,然后通过XSLT将其转换为HTML,或者让该漫游器直接访问XML,有时更容易,更直接。


最小的XML格式比典型的二进制文件更容易进行逆向工程,但是这种自我描述的痴迷是疯狂的。如果要解密XML文档,请首先从DTD开始,尽可能地消除混乱。
Steve314 2011年

3
对于其他读者:ETL = 提取,转换,加载
Peter Krauss 2013年

12

XSLT几乎已死,因为只有少数爱好者仍在使用它。但是,没有真正的替代方法。如果仅关注单个用例,例如从语义文档中呈现HTML页面,那么您会找到更好的工具。如果您正在寻找代码生成模板引擎,那么这里还有更好的工具。文件转换也一样。

但是,如果您要寻找一种在所有平台上都能很好地支持所有这些用例的工具,那么选择将非常有限。如果您已经有一个XML文档,并且必须将其转换为可以使用您的工具的格式,那么最好只使用XSLT(或XQuery)处理数据。

无论哪种方式,您都可以在几天甚至几周内学习XSLT。进行第一手体验不会伤害您。试一试。至少值得将这种模式(基于规则的转换)存储在脑海中以备后用。仅此一点就证明学习XSLT是合理的。


8

嗯,我想知道从代码创建HTML的高级API是否使用任何“幕后”的XSLT ...

在我致力于将XML从一种源格式转换为多种其他格式的过程中,XSLT被广泛使用。它也可以用于将XML转换为非XML输出。我还没有做很多事情,但是我听说它已经针对PDF和PostScript等进行了。


3
那就是XSL / FO,这是XSL / T的暹罗双胞胎。他们出生时就分开了。

8

是。

让我们举个好例子:持续集成的单元测试报告。大多数单元测试和代码覆盖程序仅输出大量不可读的XML。但是,使用一些简单的XSLT,您可以从相同的数据创建许多有用的报告。其他人可以重用这些报告。

现在,您可以使用CI工具用于插件的任何语言来编写这些代码,但是如果您不知道该语言(例如,您是使用Jenkins的.NET开发人员),则无需学习它。只需使用一个已经将XSLT应用于XML文件的插件,然后编写一些有用的XSLT。


6

编程语言中总会存在选择和多样性,而选择一个人优先于另一个语言的原因与熟悉度和时尚程度以及功能,生产率和性能等客观标准一样重要。没有人可以预测时尚,因此没有人可以预测编程语言的未来趋势。但是,有很多人已经超越了XSLT的最初学习障碍,并发现它对于各种各样的任务(可能比以前设计的要解决的种类更多)来说是一种非常有生产力的工具。

对于我看到的许多任务(以及我自己使用的XSLT任务),编写Java或ASP代码来完成这项工作将是您雇主预算的惊人浪费。但是也许不是,如果您恰巧擅长编写Java而不擅长编写XSLT。


6

XSLT不是人类可读的。元信息(标签)在实际信息(文本,xpath请求)上占据了太多位置。一个好的代码应该看起来像一个文档,而XSLT并非如此。对于映射工具而言,这是一种很好的持久性格式。

良好的转换语言应允许预览转换结果并同时查看转换流程(IF,ELSE,FOR,WHILE)。这对于可维护性很重要。关于这方面VelocityGenearateXY优于XSLT。GenerateXY甚至更好,因为它可以将预览和流程分开,而使用Velocity,您将不得不打破预览缩进以提供可读的流程。

XSLT的唯一优点是它通过使用甚至滥用“ xsl:template”元素来关心模块性。这样做的问题是,它对数据处理语言(Java,C,...)有好处,而对于表示语言却非常次要。


4

确实

有一天,某些东西可能会取代XSLT,因为学习和使用它有点麻烦。但是,目前还没有可用的模板/转换语言afaik在其实现中具有同样的灵活性和“纯粹性”。

XSL-T可以用于多种用途:

  • 您可以使用模板从数据中以HTML格式“创建”内容
  • 您可以从一种xml格式转换为另一种
  • 您可以将xml处理为另一种格式,也许显示一个子集

基本上所有这些都是相同的,但是,将一个XML数据文件转换为另一个。现在让我们看一下可以代替XSLT使用的一些不同工具。

如果我们想操纵一个XHTML页面的内容,我们可以使用regexp,但是regexp对于结构性的东西来说是混乱的。它对于操纵字符串很有用,但是我不会用它来为某些内容创建目录或以其他布局呈现它。

接下来是ASP.Net。我们将布局放在asp页面中,并在动态部分的后面插入一些代码。另一种选择是放弃布局部分,并从数据库生成所有内容,然后使用C#创建所需的输出。

第一种方法的问题在于,从描述性数据转换为实际内容很笨拙。如果您有一些包含电话号码的数据文件,并且要在每个字母的标题处显示,请显示条目总数nr等,您必须在布局文件中生成一些布局,并在生成的代码中拥有一些布局。另一种选择是使用某种形式的Web网格,我发现这些网格很杂乱,突然间,您必须了解当您想要做的就是在给定数据的情况下输出一些特定的html时,Frigging网格的工作方式。

完全动态化当然是一个选择,但这也很笨拙。即使在使用LINQ之类的最佳情况下,也必须以相当难看的方式将编程代码与输出混合在一起。此外,也没有适当的方法来正确处理html通常是的非结构化递归文档样式内容。

使用XSLT,您可以按原样或在其父项的上下文中为特定标签创建模板,因此,例如,如果它被其他东西作为父项,则呈现方式会有所不同。

一个漫长的漫长答案,但是是的,我认为描述性模板语言具有很大的价值,而XSLT是迄今为止获得的最好,最标准化的模板语言。


4

XSLT最大的失败是(在任何实际实现中)无法最小化一次为了高效处理而需要保留在内存中的文档数量。而是将整个文档读入某种形式的DOM表示形式,并对此进行处理。如果文档很大,那么内存要求也是如此。然而,许多样式表显然在任何给定时间都只需要当前标签和其他一些标签(例如,标签的祖先),因此可以用最少的内存和高效的流处理进行处理。

是的,就语言而言,这很奇怪,但这只是进入的障碍。如果您知道XSLT,它通常比替代方法要容易-但是,如果您将拥有大型文档(或一次要处理大量文档),则XSLT的内存影响通常会强制采用其他更耗时的替代方法。


3

实际上,我认为使用XSL比使用另一种语言来表示数据更为有效。例如,可以使用XSL-FO将XML表示为PDF,并且可以控制每一英寸,但是例如,如果使用RDLC(.NET),将很难准确显示所需的内容。

甚至演化/校正也很容易,因为在XSL中,每个元素都有自己的模板。我认为XSL的扩展像XSLT和XSL-FO一样重要。这就是为什么将来仍会使用这种语言的原因(但我真的希望它会更稳定和更简单)。


2

我在一家数据集成公司工作,我们将XSLT与我们的专有工具一起使用,是从XML到HTML / XML / Ascii的出色解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.