您好,欢迎访问一九零五行业门户网

基于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,从当前的角度看,它们是两种不同的技术。
以上就是基于xml的桌面应用的图文代码详细介绍的内容。
其它类似信息

推荐信息