欢迎光临
我们一直在努力

实际使用“DXML”:在站点上实现 DHTML 菜单和目录(co.)

建站超值云服务器,限时71元/月

这是有关在 web 站点上使用可扩展的标记语言 (xml) 和可扩展的样式表语言 (xsl) 的系列文章中的第三篇。在第一篇文章中,我们谈到了使用 xml 文件存储站点的目录 (toc) 信息,使用 xsl、层叠样式表 (css) 和脚本输出 dhtml toc。在第二篇文章中,我们使用同一 xml 数据生成 dhtml 菜单,而在 microsoft.com 等 web 站点中就用到了这些菜单。如果您还没有阅读这些文章,我们建议您在阅读这一篇文章之前,先阅读前两篇。

本月,我们将讨论在站点上实现菜单和 toc 的几种不同方式。我们将解决有关实现过程和架构的几个问题,同时看一看几个案例:

在框架中直接引入 xml
在动态生成的 html 中使用 asp #include
在预先创建的 html 中使用 asp #include
有一点很重要,必须注意:尽管我们能够用任一浏览器查看输出的 dhtml,但是只要进行 xsl 转换,就必须安装 internet explorer 5。如果像在第一个案例中,需要将 xml 发送到客户机,则客户机必须是 internet explorer 5。如果像在第二个和第三个案例中,要在服务器上转换 xml,则服务器上必须安装 internet explorer 5。(注意:在服务器上可以只安装可重分发的 microsoft xml 分析程序(英文))。

案例 1:在框架中直接引入 xml
如果您处于完全的 internet explorer 5 环境中(如 intranet),将输出发送给用户的最简单的方式可能是借助于 internet explorer 5 直接浏览 xml(英文) 的功能。internet explorer 5 可以使用相关的样式表提交 xml;您不需要进行显式转换。您只需要指定带有处理指南(英文)的 xsl 样式表。

在第一个案例中,我们使用自己的 toc 作为例子,toc 框架中将包含一个文件,其 webdev.xml 文件将引用 toc 样式表,如下所示:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="toc.xsl"?>

<topiclist type="web dev references">
  .
  .
  .
</topiclist>
toc 框架自身将包含在框架集中,如下所示:

<frameset cols="150,*">
  <frame name="fratoc" src="webdev.xml">
  <frame name="fracontent" src="home.htm">
<frameset>
如果您用 internet explorer 5 查看这些代码,您可以查看 xml 浏览 toc 演示。

浏览 xml 除了是一种向用户发送带样式的 xml 的简便方式,它还是一种非常好的调试 xsl 样式表的方式,即使您要在服务器上进行转换,也可以使用这种方式。internet explorer 可以在出现错误时为您提供即时的反馈,包括行号和错误类型。

案例 2:在动态生成的 html 中使用 asp #includes
在许多情况下,除了 internet explorer 5 之外,您还需要顾及其他浏览器,或者希望只用 xml 构成 html 文档的一部分(如顶端的菜单),而不是整篇文档。asp #include 命令为在较大型文档中插入几个字符的 html 和跨多页共享公用代码提供了一个非常好的方式。通过在 #include 文件中进行 xsl 转换,可以非常方便地对 asp #includes 进行扩展,以便利用 xml。

#include 文件将加载 xml 和 xsl 文件,将其转换为 html,然后将 html 写入 asp 文档。如下所示是包含菜单的 asp 文档:

列表 1:使用“动态” #includes 的通用 html 文档模板
<html>
<head>
<title>dynamic asp #include demo</title>
</head>
<body>
<!– #include file="menus_dyn.inc" –>
<p>此处为常规文档内容…</p>
</body>
</html>
include 文件将完成所有繁琐的工作。

列表 2:menus_dyn.inc
<% @language="jscript" %>
<%
  var sxml = "webdev.xml";
  var sxsl = "menus.xsl";
  
  var oxmldoc = server.createobject("microsoft.xmldom");
  oxmldoc.async = false;
  oxmldoc.load(server.mappath(sxml));
  
  if (false != oxmldoc.parseerror)
  {
    response.write(xml parseerror on line + oxmldoc.parseerror.line);
    response.end();
  }

  var oxsldoc = server.createobject("microsoft.xmldom");
  oxsldoc.async = false;
  oxsldoc.load(server.mappath(sxsl));

  if (false != oxsldoc.parseerror)
  {
    response.write(xsl parseerror on line + oxsldoc.parseerror.line);
    response.end();
  }

  response.write(oxmldoc.transformnode(oxsldoc));
%>
从上一篇文章开始,我已经将菜单升级为可跨浏览器使用,所以您能够应用任一浏览器查看动态 #include 演示。

案例 3:在预先创建的 html 中使用 asp #include
在服务器负荷较重的情况下,或您无论因何种原因,不希望在每次加载菜单时调用 xml 对象,您可以选择第三种方案:脱机进行转换。在这一情况下所使用的代码与“真正的”include 几乎完全相同。

唯一的区别是:有别于使用 response.write 输出所需要的 hmtl,我们可以使用 scripting.filesystemobject 对象将已转换的 html 保存到一个文件中。

列表 3:makemenus.asp
<% @language="jscript" %>
<%
  var sxml = "webdev.xml";
  var sxsl = "menus.xsl";
  
  var oxmldoc = server.createobject("microsoft.xmldom");
  oxmldoc.async = false;
  oxmldoc.load(server.mappath(sxml));
  
  if (false != oxmldoc.parseerror)
  {
    response.write(xml parseerror on line + oxmldoc.parseerror.line);
    response.end();
  }

  var oxsldoc = server.createobject("microsoft.xmldom");
  oxsldoc.async = false;
  oxsldoc.load(server.mappath(sxsl));

  if (false != oxsldoc.parseerror)
  {
    response.write(xsl parseerror on line + oxsldoc.parseerror.line);
    response.end();
  }

  var soutput = oxmldoc.transformnode(oxsldoc);
  var sincfilename = "menus_pre.inc";
  
  var ofs = server.createobject("scripting.filesystemobject");
  var oincfile = ofs.createtextfile(server.mappath(sincfilename));
  oincfile.write(soutput);
  oincfile.close();
  
  response.write(the include file <a href=" + sincfilename + ">
    + sincfilename + </a> was successfully created.);
%>
我们不是写入到 asp 响应流,而是在服务器上创建了一个“静态”文件,其中包含已转换的 html。换句话说,与将 xml 转换代码直接置于 #include 文件不同,所有的转换代码都将位于 “实用程序”asp 页中,该 asp 页将生成 include 文件。

如果您需要对 web 应用程序使用编译过程,您可能会喜欢这种方式。无论任何时候更新 menus.xml 文件,我们只需加载 makemenus.asp ,输出一个更新的 #include 文件。将这一算法用在 visual basic 应用程序中能够实现同一目的。

像在案例 2 中一样,我们在所有使用这些菜单的文档中添加这一 #include 文件。

列表 4:使用“预先创建”的 #include 的通用 html 文档模板
<html>
<head>
<title>dynamic asp #include demo</title>
</head>
<body>
<!– #include file="menus_pre.inc" –>
<p>此处为常规文档内容…</p>
</body>
</html>
当然,对于用户来说输出结果与案例 2 是一样的,但您可以查看各种情况下的静态 #include 演示。

三个案例的代码位于压缩的源代码存档文件中。

george young 是 microsoft 的 windows 站点的开发负责人,以前曾在 site builder network 站点从事开发工作。在他有空时,喜欢用 windows 媒体播放器收听墨西哥广播电台的节目,也常开着他的宝贝卡迪车往返于新奥尔良和华盛顿之间的 redmond。

已存档的代码角专栏
1999 年
5 月 24 日    “dxml”redux:从 xml 创建动态的 html 菜单
4 月 26 日    “dxml”:将 toc 从 xml 带到 dhtml
3 月 30 日    redirecting traffic: a smart custom 404 message for iis 4.0(英文版)

 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 实际使用“DXML”:在站点上实现 DHTML 菜单和目录(co.)
分享到: 更多 (0)

相关推荐

  • 暂无文章