3

我意识到关于这个主题还有其他一些问题,并且普遍的共识是使用您选择的语言来操作 XML。但是,这个解决方案不太适合我的情况。

首先,项目范围:我们想开发独立于平台的电子学习,目前它是一堆 HTML 页面,但随着它们的发展壮大,它们变得难以维护。我们已经有大约 30 个模块,每个模块有 10-30 个 HTML 页面,并且一直在增长。

想法:有一个 XML 文件 + Schema 预电子学习模块,然后生成一些 XSLT 文件,将 XML 处理成电子学习模块。通过 XSLT 将 XML 转换为 HTML。

原因:我们希望能够轻松地重新格式化内容的灵活性,我意识到 CSS 在这里是一个可行的替代方案,尤其是在视觉上改变外观,但我们可能需要比这更多的功能并尽可能地进行重组页面。如果我们决定以任何方式更改页面布局或功能,我猜测更改“共享”XSLT 文件将比更新 HTML 文件更容易。

根据一些“参数”,我们可以输出截然不同的页面布局/结构,超出 CSS 的能力。XSLT 可以接受 QueryString 参数吗?没有把握..

现在,所有这些都必须独立于平台,并且能够“离线”运行,即没有服务器为 HTML 提供动力,因此服务器端技术是不可能的(C#、PHP)

到目前为止我读到的关于 XSLT 的负面信息:

  • 高架?不完全确定为什么...转换为 HTML 需要计算能力吗?
  • 难学
  • 更好的选择

现在,我想确切知道的是:

  • 这种“离线”实际上有任何可行的替代方案吗?
  • 我是否以正确的方式去做
  • 你们有什么建议或替代方案。

编辑:无论有没有 XSL,CSS 和 JQuery 都将是我们开发的解决方案中非常突出的部分。一般整理(草率的英语!)

4

4 回答 4

8

为此使用 XSLT 方案是合法的。如果您开发了专业知识,XSLT 将非常强大。

  • 开销:是的,对于大型文档,转换可能需要几秒钟。对每分钟调用多次的大型文档进行转换可能是一个糟糕的策略。这对您来说不是什么大问题,因为您不会在需要修改时进行这些转换。
  • 难学。您很快就可以使用 XSLT 提高工作效率,但请注意:就在 XSLT 看起来变得容易的时候,您会惊讶于它突然变得棘手!您认为困难的事情可能很容易,反之亦然。例如,您可能必须导入或创建一些模板来进行一些简单的日期格式设置。不过这一切都是可行的。不要害怕学习如何做“模板”。
  • 更好的选择。是的,有更好的选择,但它们是特定于平台的。例如,我在 .NET 领域,我已经放弃了 XSLT,转而支持操作我们的新 XElement 等,而 VB.NET 嵌入式 XML 非常强大且简单。但是当您想避免依赖于特定平台时,XSLT 仍然很棒。

您仍将使用 CSS 作为您策略的一部分,对吗?将 XSLT 更改为始终如一的输出样式比在 30 个模块中手动完成要好,但是精心策划的 CSS 样式表仍然可以帮助简化事情(增加可维护性和灵活性)。

总结:组织静态 html 页面的布局/修订,独立于平台,灵活分布:是的,从我所见,你有一个很好的策略。您在 XSLT 中开发的专业知识在未来也将很有用。并且在掌握了 XSLT 之后,您将真正了解 XML,这将永远有用。

于 2010-05-20T18:42:09.147 回答
4

XSLT 是在您所描述的情况下用于从 XML 文档生成 HTML 的理想工具。如果您正在使用 XSLT 生成静态 HTML 页面,那么对于 XSLT 的处理开销的常见抱怨(它需要将整个源 XML 文档加载到内存中)实际上是无关紧要的,除非您正在生成数十万个这样的页面。

(事实上​​,这种抱怨只在源 XML 文档很大的情况下才相关。如果您已经构建了一个围绕从大型 XML 文档动态生成 HTML 的体系结构,那么选择 XSLT 作为您的技术可能是一个错误,但事实并非如此大错误。)

你当然应该使用 CSS。

于 2010-05-20T21:26:02.177 回答
2

将数据与演示文稿分开。

将演示文稿渲染卸载到浏览器,使用 CSS 和 CSS“增强器”,如 SASS、Less 等。

生成严格的 XHTML - 可以用 CSS 格式化,可以用 XML 解析器解析等

使用 JQuery 之类的交互性

XSLT 是相当重量级的,不能很好地扩展,而 XHTML+XSS+JQuery 很好理解并且存在很多工具。

于 2010-05-20T18:59:27.293 回答
0

如果您已经了解 C# 或 VB.NET,请考虑使用 LINQ to XML,代码会更长,但对于非 XSLT 专家而言,编写和维护可能会更轻松。

这一切都归结为您需要多少 XML 转换,只要 1 或 2 次,我就不会花时间学习 XSLT。

于 2010-07-29T14:48:51.543 回答