Username: Password:

基于xml的桌面应用_xml技巧
来源:作者:网友供稿 发布时间:2007-12-07 05:40:41

  前面已提到,通过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,从当前的角度看,他们是两种不同的技术。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅