用XML和XSL来生成动态页面

作者:马晓宁 时间:2008-09-04 10:35:00 

xml(可扩展标记语言)看起来可能像某种w3c标准——现在没有什么实际影响,即使以后能派上用场,也是很久以后的事。但实际上,它现在已经得到了应用。所以,不要等到xml已被加进了你最喜爱的html编辑器中才开始使用它。它现在就可以解决各种内部问题和b2b系统问题。

在sparks.com,我们使用xml来标准化从java对象到html数据显示等不同系统之间的数据表示。

特别需要指出的是,我们发现,只要以非常基本的xml结构来实现标准化,就可以更容易地共享和操作数据。在这一过程中,我们发现了使用xml的很多有效方法。下面详细介绍我们现在的应用情况。

标准化

在使用xml之前,建立与你要使用的信息不同的xml数据格式。

生成动态xml

从数据库中生成html并不新鲜,但生成xml却很新鲜。这里我们介绍具体的生成步骤。

用xsl作为模板语言

xsl(可扩展样式表语言)是定义xml数据显示格式的好方法,如果写成几个静态模板会更有效。

生成html

xml加上xsl就等于html。这听起来似乎不对,但用户所见的我们的html页面其实就是xml和xsl共同产生的效果。


一、标准化

xml的能力来自于它的灵活性。但不幸的是,它有时太灵活了,以至于你会面对一个空白的页面,发愁该怎么解决问题。

在任何xml的项目中,第一步工作都是创建标准的数据格式。为此你要作出以下决定:


• 要涉及哪些数据
• 是否要使用dtd(文件类型定义)
• 是否要使用dom(文档对象模型)或sax(xml的简化api)解析


确定数据:

因为没有标准的xml格式,开发者可以自由地开发自己的格式。然而,如果你的格式只能被一个应用程序识别,那么你只能运行这个程序来使用该格式。如果还有其他程序也能读懂你的xml格式,那显然会更有帮助。如果某个xml格式被修改,则使用它的系统可能也需要被修改,所以你应该建立尽可能完整的格式。因为大多数系统忽略它们无法识别的标签,所以改变一个xml格式的最安全的方法是添加标签,而不是修改标签。

单击此处查看xml数据格式实例

在sparks.com,我们查看了不同的产品展示需要的所有产品数据。尽管并不是所有的页面都使用全部数据,但我们还是由此开发出适用于所有数据的非常完整的xml数据格式。例如,我们的产品明细信息页面显示的数据要比产品浏览页面多。然而,我们在这两种情况下仍然使用相同的数据格式,因为每个页面的xsl模板都只使用它所需要的字段。

是否使用dtd

在sparks.com,我们使用组织良好的xml,而不使用仅仅是正确的xml,因为前者不需要dtd。dtd在用户点击和看到页面之间加入了一个处理层。我们发现这一层需要太多的处理。当然,在以xml格式与其他公司通信时,使用dtd还是很不错的。因为dtd能在发送和接受时能保证数据结构正确。

选择解析引擎

现在,可以使用的解析引擎有好几个。选择哪一个几乎完全取决于你的应用需要。如果你决定使用dtd,那么这个解析引擎必须能使你的xml被dtd验证。你可以将验证另放到一个进程中,但那样会影响性能。

sax和dom是两个基本的解析模型。sax基于事件,所以在xml被解析时,事件被发送给引擎。接下来,事件与输出文件同步。dom解析引擎为动态xml数据和xsl样式表建立层次树状结构。通过随机访问dom树,可以提供xml数据,就象由xsl样式表来决定一样。sax模型上的争论主要集中于对dom结构的内存降低过度和加快xsl样式表解析时间缩短方面。

然而,我们发现使用sax的很多系统并没有充分发挥它的能力。这些系统用它来建立dom结构并通过dom结构来发送事件。用这种方法,在任何xml处理之前必须从样式表中建立dom,所以性能会下降。

标签:xml,xsl,动态
0
投稿

猜你喜欢

  • 微信小程序 scroll-view实现上拉加载与下拉刷新的实例

    2024-04-23 09:30:40
  • python绘制规则网络图形实例

    2021-08-31 02:28:28
  • axios发送post请求,提交图片类型表单数据方法

    2024-04-26 17:40:27
  • electron-vue 项目添加启动loading动画的实现思路

    2023-07-02 16:52:41
  • Golang template 包基本原理分析

    2024-04-25 15:18:32
  • SQL Server查询速度慢原因及优化方法

    2008-12-03 15:19:00
  • Access:数据转换问题

    2008-11-20 17:02:00
  • Python配置虚拟环境图文步骤

    2023-10-13 01:37:40
  • Golang将Map的键值对调的实现示例

    2024-04-27 15:32:40
  • selenium+python截图不成功的解决方法

    2021-06-02 23:25:06
  • Python基于Serializer实现字段验证及序列化

    2023-07-19 21:50:36
  • asp随机提取access数据库记录的几种方法

    2007-09-06 19:42:00
  • 浅谈使用Python变量时要避免的3个错误

    2022-06-20 21:07:07
  • Python性能优化的20条建议

    2021-05-20 15:24:12
  • 在VSCode中搭建Python开发环境并进行调试

    2021-09-20 23:19:13
  • 介绍Python的Django框架中的静态资源管理器django-pipeline

    2023-11-12 00:10:35
  • 详解pandas库pd.read_excel操作读取excel文件参数整理与实例

    2021-08-07 00:06:22
  • MySQL8新特性之全局参数持久化详解

    2024-01-23 12:17:10
  • 详解nodejs内置模块

    2024-05-03 15:54:20
  • python 实现"神经衰弱"翻牌游戏

    2023-02-08 05:34:05
  • asp之家 网络编程 m.aspxhome.com