选择显示字体大小

基于xml的桌面应用


  前面已经提到,通过xsl,我们可以把相同的数据以不同的数据形式提交给终端客户,一个xsl文件描述了数据的显示方式,你可以把许多xsl和同一个xml文档相连来提供不同的基于html的表示,这样事实上,我们就可以建立基于xml的桌面应用程序。基于windows体系结构的一个图形表示如下所示:



  采用这种方法主要有两个优点,首先,你可以以平台和语言独立的方式来操作数据,其次,不需要编程你就可以实现对同样数据的不同的视图表示。

  实际上,你需要一个工具能够把原始的数据转化为xml格式化的形式,然后用html的格式表示出来。实际上在ie5.0中,你可以通过它对xsl的支持来实现数据的不同视图。可以使用内建的xsl处理器来从xml流中产生输出。开发人员可以编写不同的xsl剧本,然后用ie内建的xsl处理器对它进行处理。另一方面,我们可以通过ado组件的内在功能实现把记录集转化为xml格式,示例代码如下:

  if dir(xml_file) = "" then
    rs.save xml_file, adpersistxml
  end if

  这里常量adpersistxml表示使用一个xml纲要来保存记录集的内容

  我们再仔细看一下recordset对象的save方法,其定义如下:

   save([filename as string], [persistformat as persistformatenum = adpersistadtg])

  每一个参数都是可选的,但是当你第一次把记录集保存到磁盘上的时候,你必须指定文件的名称。如果当该方法执行的时候,存在一个有效的过滤器的话,只有通过过滤的数据才能够被保存。当调用recordset对象的方法close关闭recordset对象的时候,文件也被自动关闭。当recordset被保存到磁盘上以后,你可以采用open方法来阅读它,具体代码如下:

   rs.open "c:\myrs.xml"

  然后我们分析一下关于xml数据的显示的问题,ie5对xsl的支持是基于w3c最近的草案标准建立的。这里我们讨论用vb建立一个应用,它通过ado接口来访问数据源中的数据。得到的记录集可以以不同的格式化的形式展现。通过编写xsl文档,你可以任意的增加不同的视图

  比如,一旦你提取了一个结果集以后,你可以在vb中用datagrid控件方便的显示数据,具体代码如下:

   set rs = new adodb.recordset
   rs.cursorlocation = aduseclient

   querystring = "select * from employees"
   rs.open querystring, "northwind" 'northwind是微软的示例数据库,很容易在
    'access或者是sql server中找到
   rs.activeconnection = nothing
   set datagrid1.datasource = rs

  在许多情况下,这个的一个视图是不够的,你需要对每个字段进行严格的控制。整个表中的记录可能既用表格又用树的形式表示,提供多个视图会让用户感到更加舒服。 xml和xsl相结合是这种问题的很好的解决方案,你可以充分利用ie5中的webbrowser控件的功能直接进行浏览。
  ado组件本身不对它产生的xml文档生成任何的xsl文档。单这并不表示你不能自己编写一个通用的xsl文档来改变数据的显示方式。比如为了自动的把一个包含ado记录集的xml文档以表格的形式显示的话,需要在xml的文档头部增加如下的代码:

  <?xml-stylesheet type="text/xsl" href="simple.xsl"?>

  这个simple.xsl文件必须放在和xml文档相同的目录下,它包含两个嵌套的循环,第一个循环枚举了元素的所有属性,这些属性的名字作为标题显示在第一行,第二个循环用来输出记录集中的所有记录。

  simple.xsl文件的代码如下所表示:

  <?xml version="1.0"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"
   xmlns:html="http://www.w3.org/tr/rec-html40"
   result-ns=""
   language="jscript">
  <xsl:template match="/">
  <html
  <head>
  <title>rowsetschema</title>
  <style>
   .stdtext
   {
    font-family:verdana;
    font-size: 9px;
   }
  </style>
  </head>
  <body>
   <table width="100%" border="1">
   <xsl:for-each select="xml/s:schema/s:elementtype/s:attribute">
    <th class="stdtext"><xsl:value-of select="@type" /></th>
    </xsl:for-each>
    <xsl:for-each select="xml/rs:data/z:row">
    <tr>
     <xsl:for-each select="@*">
     <td class="stdtext" valign="top"><xsl:value-of match="@*"/></td>
     </xsl:for-each>
    </tr>
    </xsl:for-each>
   </table>
  </body>
  </html
  </xsl:template>
  </xsl:stylesheet>

  这里需要注意的是关于列举一个给定节点的所有属性的语法,实际上我们需要得到任何<z:row>元素的所有属性,字符串@*表示所有的属性(一个属性的名字总是需要在前面加上@,为了使用这个值,<xsl:value-of>节点必须设置和它匹配的属性,用@*进行表示。

  通过使用webbrowser控件作为你浏览数据的引擎,你可以使用xml和xsl把内容从表示层中分离出去。在这种模型中,xsl的作用是作为一个标记语言(而不是编程语言)来描述如何显示xml数据,为了增加一个新的视图,只需要增加一个对应的xsl文档就可以了。事实上这种基于web的文档/视模型可以和mfc下的文档/视模型进行类比。

   最后我们需要在讲一下,xsl和css有什么不同呢?关键的不同是xsl是应用在整个xml文档的,而css只对html标签的显示形式产生影响。xsl是一个处理文件的标记语言,而css是一个属性集合用来表示标记语言中一个元素的属性。而且,xsl在从xml数据流中产生html输出的时候,能够使用css,从当前的角度看,它们是两种不同的技术。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons