新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → XML在.net平台下的自定义控件的应用 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 10791 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XML在.net平台下的自定义控件的应用 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 XML在.net平台下的自定义控件的应用

    2003-04-17■冯杰■yesky

    Xml全称可扩展标记语言(extensible marked language),这套语言系统由于在数据处理,跨平台等方面的独特优势,在近几年风靡全球。Xml语言系统把任何数据都作为“键”和“值”来进行处理,这一点类似于很多数据库管理系统(DBMS),而且它与具体的机器指令无关,其存储方式是纯文本文件,因此具有出色的跨平台性。另外它允许用户创建自己的数据指令系统,在这套指令系统的框架下,用户可以把所有信息转换成易于存取的数据,大大加快了开发的周期和代码的可移植性。

      既然XML这么好,那它到底是什么样子的呢?最近笔者因为课题的需要,开发了一个基于.net平台下的menu控件,并且加入了xml特性。制作的步骤如下:

      第一步:制作一个.net平台下的menu控件

      .net平台下面的自定义控件的工作原理如下:控件对应于一个类(class),控件的所有属性通过类的成员变量来暴露,而控件的方法对应于class的成员函数。在控件被加载的手,系统会调用class的render方法,制作控件的时候,应该重载(override)这个render方法,使得在控件被加载的那 一刻,控件可以自己“绘制”自己,一般来说,在render方法里面要将关于控件界面绘制的那些javascript文件放入到输出流中。

      由于这里重要是讲解后面XML的应用,所以这里只是把自定义控件的原来简要说明一下,下面罗列出相关对象,属性,方法。

      整个menu控件分为Topmenu,Submenu,Childrenmenu,MenuItem四个对象,其相应的信息为:

      控件属性:

       ID:标识控件名字

       MenubarHeight:菜单拦的高度

       MenubarWidth::菜单拦的宽度

       BorderWidth::边框宽

       AutoDropdown:true表示自动下拉,false表是单击鼠标下拉

       DropdownDelay:下拉时间

       Menufont:字体

       LocationX:菜单的x位置

       LocationY:菜单的y位置

       XmlFile:xml文件

       XmlStream:xml流

       topmenu对象属性:

       ID:同上

       Text:顶层菜单的文本

       Isparent:true表示有下一级菜单,否则为false(false默认)

       Islink:需要用事件处理用true,否则false(false默认);

       Bgcolor:背景色

       Forecolor:前景色

       HoveredBackcolor:鼠标放在上面的颜色

       Topmenufont:字体

       Linkurl:当isparent为false才有效,表示连接的url

       Borderwidth:topmenu的边框宽

       Itemheight:下一级菜单的高度(必须isparent为true才有效)

       Itemwidth: 下一级菜单的宽度(必须isparent为true才有效)

       Submenus:含有下一级菜单的数组列表

       Submenu,Childrenmenu 和MenuItem的所有属性跟上面Topmenu一样,这里就不赘述了。

    第二步,就是加入XML特性

      注意,任何xml文档在其被处理之前最好先进行有效性验证,提供验证一般有两种重要的途径。其一就是提供DTD(文档类型定义),实际上就是让用户提供指令集,然后在xml文档加载的时候对其进行有效性分析,看是否有无效指令,简单说就是创建一个编译环境;另外一个就是提供一个所谓的schema。.其作用跟DTD完全一样,只是在表现形式上好于DTD,因为它本身也是一个XML文档。这里我采用了schema的形式,当然了,读者用兴趣也可以将其替换问相应的DTD版本。下面列出该schema的关于控件和topmenu对象的代码,如果要看该文档的详细代码,请看 “代码.doc”。

      menu.xdr:

    <?xml version="1.0" encoding="UTF-8"?>

    <Schema name="menus" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

    <description>

    menus schema used to validate menu.xml

    </description>

    <ElementType name="menu" model="closed" content="empty">

    <AttributeType name="id" dt:type="string" required="yes"/>

    <atttibute type="id"/>

    <element name="topmenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>

    </ElementType>

    <ElementType name="topmenu" model="closed" content="empty">

    <AttributeType name="id" dt:type="string" required="yes"/>

    <AttributeType name="text" dt:type="string" required="yes"/>

    <AttributeType name="linkurl" dt:type="string" required="yes"/>

    <AttributeType name="isparent" dt:type="string" required="yes"/>

    <atttibute type="id"/>

    <atttibute type="text"/>

    <atttibute type="linkurl"/>

    <atttibute type="isparent"/>

    <element name="submenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>

    </ElementType>

    <ElementType name="submenu" model="closed" content="empty">

    <AttributeType name="id" dt:type="string" required="yes"/>

    <AttributeType name="text" dt:type="string" required="yes"/>

    <AttributeType name="linkurl" dt:type="string" required="yes"/>

    <AttributeType name="isparent" dt:type="string" required="yes"/>

    <atttibute type="id"/>

    <atttibute type="text"/>

    <atttibute type="linkurl"/>

    <atttibute type="isparent"/>

    <element name="childrenmenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>

    </ElementType>

    <ElementType name="childrenmenu" model="closed" content="empty">

    <AttributeType name="id" dt:type="string" required="yes"/>

    <AttributeType name="text" dt:type="string" required="yes"/>

    <AttributeType name="linkurl" dt:type="string" required="yes"/>

    <AttributeType name="isparent" dt:type="string" required="yes"/>

    <atttibute type="id"/>

    <atttibute type="text"/>

    <atttibute type="linkurl"/>

    <atttibute type="isparent"/>

    <element name="menuitem" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>

    </ElementType>

    <ElementType name="menuitem" model="closed" content="empty">

    <AttributeType name="id" dt:type="string" required="yes"/>

    <AttributeType name="text" dt:type="string" required="yes"/>

    <atttibute type="id"/>

    <atttibute type="text"/>

    </ElementType>

    </Schema>

      如果您对html比较熟悉的话,相信上面的代码即使是以前没有接触过也应该清楚了,在.xdr中,有两个对象,其一是元素,用前缀 ElementType 来定义,另外一个是该元素所对应的属性,用前缀atttibuteTpye,定义完这两个对象后,就是要将它们实例化,对应的前缀分别是Element 和atttibute,然后您就可以使用这两种已经实例化了的对象,就象使用html中<a>,<l>,<body>,<head>等标记一样。

      为了更加清晰的说明上面的代码,我们这里举一个例子,相信读者一目了然:

    <menus xmlns='x-schema:Menu.xdr'>

    <menu id='menuBar1'>

    <topmenu id="xjtu" text="xjtu" isparent="true" linkurl="xjtu"></topmenu>

    <submenu id="sina" text="sina" isparent="false" linkurl="sina"></submenu>

    <topmenu id="sohu" text="sohu" isparent="false" linkurl="sohu"></topmenu>

    </menu></menus>

      创建完xml文档后,就要在程序里面读取xml文档,这里如果采用微软的vs.net平台开发的话,建议可以使用XmlTextReader来读取相关信息,具体细节可以查阅MSDN。

      第三步:使用控件

      创建完了menu控件,现在就是在.net平台下面来使用它。首先要在vs.net平台下面编译该控件,如果编译成功就可以使用它了。使用.net自定义控件和使用一般的ActiveX控件很相似,启动vs.net平台下面的部件箱(可以直接在ToolBar上右击鼠标来得到),注意我们制作是不是基于COM组件,而是ASP.net组件,所以从这点上它与COM组件有本质的不同,通过Browse按钮可以选择该控件对应的dll文件,将其添加进你的工程。下面你还要在你的程序代码中加入下面的代码(其他代码略)

      using 你的名字空间 ; (A)

      还应该在behind code加入该控件的声明 (B)

      事实上,无论是A处的代码还是B处的说明,都可以由VS.NET平台自动生成,如果使用其他平台并且不支持这种代码的自动添加的话,就可以手动添加。添加完之后,这样就可以和其他控件来进行使用了。而且在控件类代码中的所有的公有的成员变量,函数分别对应于控件的属性和方法。

      这里需要指明的就是控件必须提供两个属性,那就是XmlStream和XmlFile,如果用户已经制作好了控件的XML文件(该文件描述了控件的数据),或者是已经写好了一个xml代码的话,可以把代码和文件分别传给XmlStream和XmlFile,后台程序(就是dll文件)通过调用一些XML的阅读器比如XmlTextReader来读取xml数据,这样就达到了控件支持xml属性了,进而也增强了控件的移植性和通用性。

      本文主要讨论了xml在.net平台下控件制作方面的应用,从上面的例子可以看出,xml在数据的整合,处理方面确实有它独特的优势,如果你的项目中涉及到数据处理和跨平台的问题,可以考虑应用XML.。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/23 11:59:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/27 18:38:25

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    85.938ms