基于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,从当前的角度看,它们是两种不同的技术。

(0)

相关推荐

  • 基于XML的桌面应用

    前面已经提到,通过XSL,我们可以把相同的数据以不同的数据形式提交给终端客户,一个XSL文件描述了数据的显示方式,你可以把许多XSL和同一个XML文档相连来提供不同的基于HTML的表示,这样事实上,我们就可以建立基于XML的桌面应用程序.基于Windows体系结构的一个图形表示如下所示: 采用这种方法主要有两个优点,首先,你可以以平台和语言独立的方式来操作数据,其次,不需要编程你就可以实现对同样数据的不同的视图表示. 实际上,你需要一个工具能够把原始的数据转化为XML格式化的形式,然后用HTML

  • 如何基于JavaFX开发桌面程序

    基于JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献吧 使用环境 注:写这个只是为了说明我的环境,使用和我的不一样的环境在理解这篇教程的时候并没有什么问题,例如使用Windows平台.使用Oracle JDK(这样就不需要再单独安装FX组件了,可以不用MAVEN).使用Oracle的SceneBuilder.可能唯一一个比较影响体验的就是不使用IDE

  • 基于XML的购物车的实现

    购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处理的需要,而这一点在有些电子商务活动中很有必要.XML的出现使得网络上传输的数据变得有意义起来,我们可以根据不同的要求以不同的样式将一个购物车的内容显示出来. 本文将详细分析一个由Java实现的基于XML的购物车.下面是一个包含了五件商品的购物车的XML内在结构:它的根元素为cart,total元素表示购物车内的总金额,每个item元素表示一件商品,item

  • ASP开发基于XML的留言板

    XML(Extensible Markup Language)是一种基于文本格式的标记语言,它注重对数据结构和数据意义的描述,实现了数据内容和显示样式的分离,而且是与平台无关的.由于XML注重数据内容的描述,因而,对于数据的检索非常有意义,我们不会再象HTML那样,检索出与我们要求无关的信息.另一方面,XML文件是数据的载体,利用XML作为数据库,不需要访问任何数据库系统,我们可以使用任意WEB技术来显示我们的数据,比如HTML,Flash 5 等.由于世界各大计算机公司的积极参与,XML正日益

  • jsp基于XML实现用户登录与注册的实例解析(附源码)

    简单的基于xml做数据库的登录与注册 主题介绍: 1.xml的读取和存储,主要是用到dom4j技术,(网络中的文件存储路径采用classLoader) 文件的读取和存储,写了一个工厂类 public class DocumentFactory { private static Document dom=null;//需要共享一个dom,所以需要设置为static private static String name="user.xml"; private static String f

  • python基于xml parse实现解析cdatasection数据

    本文实例讲述了python基于xml parse实现解析cdatasection数据的方法,分享给大家供大家参考. 具体实现方法如下: from xml.dom.minidom import * implementation = DOMImplementation() print "Core:%s" % implementation.hasFeature('core', '2.0') print "Events:%s" % implementation.hasFea

  • python解析基于xml格式的日志文件

    大家中午好,由于过年一直还没回到状态,好久没分享一波小知识了,今天,继续给大家分享一波Python解析日志的小脚本. 首先,同样的先看看日志是个啥样. 都是xml格式的,是不是看着就头晕了??没事,我们先来分析一波. 1.每一段开头都是catalina-exec,那么我们就按catalina-exec来分,分了之后,他们就都是一段一段的了. 2.然后,我们再在已经分好的一段段里面分,找出你要分割的关键字,因为是xml的,所以,接下来的工作就简单了,都是一个头一个尾的. 3.但是还有一个问题,有可

  • C#实现基于XML配置MenuStrip菜单的方法

    本文实例讲述了C#实现基于XML配置MenuStrip菜单的方法.分享给大家供大家参考.具体如下: 1.关于本程序的说明 用XML配置MenuStrip菜单,本程序只是提供一个思路.程序在Load函数中根据XML文件中的设置动态生成一个MenuStrip组件的Items集合. 程序示例如下: 2.使用到的XML文档示例 <?xml version="1.0" encoding="gb2312"?> <!--MenuStrip:mnsMainMenu

  • jQuery基于xml格式数据实现模糊查询及分页功能的方法

    本文实例讲述了jQuery基于xml格式数据实现模糊查询及分页功能的方法.分享给大家供大家参考,具体如下: 1.此代码只支持xml 格式数据,根据不同需求修改ajax的success方法就ok了 2.此代码只是针对ajax只需一次请求的情况下 String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"");};//解决ie trim问题 (function($) { /** * ============

  • php制作基于xml的RSS订阅源功能示例

    本文实例讲述了php制作基于xml的RSS订阅源功能.分享给大家供大家参考,具体如下: 首先制作一个 RSS 模板,模板的文件名是 feed.xml,代码如下: <?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"></rss> 再就

随机推荐