20

这种技术现在还流行吗?

我想制作一个自动转换 XSLT 文件的网站。它应该像这样工作:当用户访问该站点时,单个处理程序将接受他的请求,然后为它找到合适的 XML(根据请求的 URL)并使用其附加的 XSL 文件对其进行转换。

我想这样做是为了方便使用纯 XML 文件更新站点(而不是使用成熟且昂贵的 CMS 系统)。

你说什么?好主意?馊主意?有人有推荐吗?

谢谢!

4

14 回答 14

26

回到 2002-2003 年,我用 XSLT 做了很多工作(在 2006-2007 年还做了更多)。您在这方面的里程会有所不同,但老实说,出于以下几个原因,我会避免这样做:

  • 语法令人眼花缭乱,难以学习,难以正确理解,简单明了让你头疼。模板本身并不算太糟糕,但会引入一些粗糙的 XPath 表达式,这很痛苦;
  • 对于合理大小的文档和转换,它相对较慢。它是否足够慢以至于与您相关,您只能通过对您的场景进行基准测试才能发现,因此不要将其视为一揽子规则,更多的是警示故事或警告;
  • 错误消息并没有那么有用,而且很难找出问题所在。与更传统的方法不同,您不能抽出调试器并单步执行 XSLT。
  • 使用任何现代 Web 风格的语言(C#、Java、PHP、Python、Ruby 等)生成 HTML 非常简单、直接、易于记录和调试;
  • 操作 XML 可以说更加繁琐,并且会生成更多直接操作对象并将其转换为标记的代码。这当然会因您选择的语言为您提供的工具而异。

这些天来,我真正能看到有一个 XSLT 应用程序的唯一地方是使用生成 XML 的 Web 服务(现在很多生成 JSON 和更容易使用的格式)。

即使在那种情况下,我可能仍然会直接使用 Java 中的 JAXB(或其他语言中的类似技术)直接操作 XML。

更新:我刚刚在 Web Frameworks 中遇到了 XSLT 之死。例如:

例如:如何隐藏表格中的行(使用不同的 CSS 样式),基于一些 CONDITION,使用 XSLT?看:

<tr>
  <xsl:attribute name="style">
    <xsl:choose>
      <xsl:when test="CONDITION">
        <xsl:value-of select="'visibility: visible'">
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="'visibility: collapse'">
      </xsl:otherwise>
    </xsl:choose>
  </xsl:attribute>
  ...
</tr>

现在与 JSP 1.x 相同:

<tr style='visibility:<%=CONDITION ? "collapse" : "visible"%>'>
   ...
</tr>

或使用 JSP 2.x:

<tr style='visibility:${CONDITION ? "collapse" : "visible"}'>
  ...
</tr>

总结如下:

因此,如果您开始新项目,请在开始使用 XSLT 之前三思(或十次)。并且 > 如果您使用 Eclipse,您甚至可以在使用 JSP/JSTL 之前三思而后行。Velocity 或 > FreeMarker 可能是更好的选择。

于 2009-02-18T11:21:19.277 回答
21

基于“语法很难”的答案根本没有答案。一种)。它真的不是,和B)。你应该是一个程序员,学习它。

当然,其他技术正在以 XSLT 自 2005 年以来从未有过的速度发展,但它仍然是一个强大的工具,它为您提供了一个抽象级别,比如 asp.net webforms 没有,并允许您提供一个通用的可扩展解决方案简单地序列化为一系列输出格式。使用任何给定语言生成 HTML 都很容易,现在将其扩展到 XML、现在将其扩展到 JSON、现在将其扩展到 CSV 则更难。

在仍然受 I/O 限制的环境中,缓存的转换足够快。

OTOH,在 XML 中存储数据通常不是一个好主意。出于上述所有原因,最好存储在数据库/内存中并根据需要进行序列化。

于 2009-02-18T12:07:22.757 回答
4

在工作中,我正在进行的一个项目使用 XSLT,老实说,这真的很痛苦。实际的 XSLT 文件并不难处理,但必须创建 XML 会增加额外的复杂性。我还发现,除了最基本的页面之外,XML 往往会变得非常臃肿和混乱。所以,不,我不会推荐它。

于 2009-02-18T12:53:41.240 回答
3

我知道在波兰,很少有大型门户网站大量使用 XSLT。他们使用它是因为它可以最大限度地减少通过网络发送的数据量。

我还参与了这个项目(Huge HRM 应用程序),我们在那里使用它来将我们的编程语言转换为 .NET。

我会说它有时非常有用。

于 2009-02-18T11:50:01.720 回答
2

XSLT 只是一种模板方法。它也只是一个完整的 MVC 框架的一部分,其中模板是 View 组件。XSLT 是一项伟大的技术,但它速度慢,而且不是构建可扩展网站的首选。

研究 MVC 框架,看看哪个最适合你。例如 ASP.NET MVC、Ruby on Rails、CakePHP、Catalyst 等。

于 2009-02-18T11:21:43.880 回答
2

我想这样做是为了方便使用纯 XML 文件更新站点(而不是使用成熟且昂贵的 CMS 系统)。

呃,什么?有许多免费和开源的 CMS。

spoulson 上面所说的关于模板的内容是重点。从输入 XML 文件提供输出页面很好。但这不会让您获得 CMS。CRUD 呢?搜索?页面列表?

如果您的站点非常小,以至于您可以通过手动编辑一些 XML 文件来完成所有相关的更新,那么为什么不呢,那就去吧。但如果就这么简单,您还不如手动编辑 HTML。

于 2009-02-18T20:54:27.887 回答
2

我喜欢这个主意。XSL 是一个了不起的工具,但是在您意识到它真正有用之前,您必须有那个特殊的启蒙时刻。在此之前,它似乎马马虎虎。

我在各种应用程序中使用过 XSL,它为我节省了很多时间。但显然不要仅仅为了它而使用它。

于 2009-03-24T16:06:38.060 回答
2

您所描述的已经存在并且是 Apache Cocoon:http ://cocoon.apache.org/

于 2009-04-15T08:19:57.300 回答
2

xslt很难吗?

解决复杂问题和复杂标准是程序员的工作。有些东西更难,但仍然需要。只要坚持下去,每次你需要学习新东西时都会变得更容易。

Xslt 很简单。

真的!那里有教你 xslt 的好书。只需学习例如 rdf/owl(一个 w3c 标准),它仍然可以变得更加复杂......

xslt 很慢?如果可以的话,只需使用正确的缓存。(好吧,它并不总是可能的......)。

只需阅读 REST(一些书或 Roy Fielding 论文),这也是必不可少的内容。

现在使用 XProc (xslt piplines) 和一个围绕 calabash (Xproc implementationaion) 的小型 restserver,您可以归档这么多。它绝对可以节省您的时间。任何数据都可以导出到 XML,通过 REST 变为可用并使用 XProc 进行转换。

于 2010-05-07T10:21:59.383 回答
2

Symphony CMS使用 XSLT。在使用该 CMS 时,我发现我遇到的唯一真正问题是学习 XSL/XPath 语法,主要是由于缺乏好的教程/文档。如果您想了解一些相对现代的 XSLT 用法,可能值得一试 Symphony。

于 2010-05-07T10:37:05.097 回答
1

看看http://www.umbraco.org/它是一个免费的开源 CMS 工具,它广泛使用 XSLT 来生成页面。

对于那些声称 XSLT 很难的人,我想说它并不比 SQL 难。有些场景很难,比如分组,就像在 SQL 树中很难一样。

为正确的工作选择正确的工具,您应该不会有任何问题。

于 2009-02-18T13:58:27.777 回答
1

如果您的平台是 ASP.NET,请查看myxsl

XSLT 使您能够进行不显眼的模板,这是 IMO 的终极模板。

于 2010-01-10T22:48:24.910 回答
1

附带说明一下,wowarmory.com是使用 XSLT 的高流量站点的一个很好的例子。事实上,我认为整个网站都在使用它。

于 2010-01-23T07:04:22.320 回答
0

对我来说听起来是个坏主意。使用 ASP.NET 之类的东西将内容存储在数据库中要容易得多 - 然后您可以将内容直接更新到数据库中 - 这本身比编辑 XML 更容易。

于 2009-02-18T11:29:07.980 回答