首页 > 语言 > 关键词  > 正文

XML在.net平台下的自定义控件的应用(2)

2007-08-14 14:35 · 稿源:编程中国

第二步,就是加入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。

举报

  • 相关推荐
  • 40岁“彩铃顶流”歌手回应隐身10年 歌手欢子曾霸榜音乐平台top1

    ​近日,沉寂十年的40岁“彩铃顶流”歌手欢子在采访中,首次回应了这十年间鲜少有动态的原因。欢子坦言,对于一名歌手而言,从事业的一个阶段迈向另一个阶段,需要时间沉淀。他回忆道,十几年前自己在互联网音乐排行榜上常常位居榜首,但当达到那样的高位后,若没有沉淀,内心便会陷入迷茫。在如今新人辈出的时代,欢子笑称,估计消失10天就没人能想起自己是谁�

  • 从复古到未来欧拉汽车好猫GT2025款 定义个性出行新方式

    欧拉汽车推出2025款好猫GT,延续品牌个性化设计语言,在细节处全面升级。新车采用复古轮毂、圆形大灯与低矮车头组合,新增暗夜机甲猫配色,搭配熏黑蜂窝矩阵格栅和"机甲猫耳"空气导流槽,视觉冲击力十足。内饰采用麂皮材质与Alcantara面料交织的运动座椅,配备12.3英寸悬浮式中控屏与7.25英寸全液晶仪表,支持语音交互和双模式互联。动力方面提供双功率版本,采用蜂巢短刀电池2.0,CLTC工况续航430公里。在10-15万级纯电市场竞争中,好猫GT凭借差异化定位,精准切入年轻用户对个性与性能的双重需求。

  • 骁龙8 Elite 2弟弟来了!高通全新骁龙8系平台曝光

    高通今年下半年将会推出两款旗舰Soc,一款是正统迭代的骁龙8 Elite 2,型号是SM8850,还有一款是新品,型号是SM8845,命名未知。 据爆料,SM8845采用高通自研Oryon CPU架构,由台积电代工,基于台积电3nm工艺制程制造,安兔兔跑分预计在300万分左右,性能跟骁龙8 Elite接近。 从配置来看,SM8845是高通骁龙8 Elite 2的小弟”,其自研架构看齐骁龙8 Elite 2,但是性能会弱一点,跟去年的

  • 骁龙8 Elite 2弟弟来了!曝一加首发高通骁龙8系新平台

    博主数码闲聊站爆料,高通将在今年下半年推出两款旗舰Soc,一款是正统迭代芯片骁龙8 Elite 2,型号是SM8850,一款是次旗舰芯片,型号是SM8845,命名未知。该博主还爆料,SM8845大概率由一加首发。 作为次旗舰产品,SM8845基于台积电3nm工艺打造,并且采用高通自研的Oryon CPU架构,配备2 6”全大核,彻底摒弃传统小核架构,通过动态资源分配优化多线程任务处理能力。

  • 贵金属投资平台安全大考:2025炒黄金安全平台评比 TOP10榜单揭晓

    文章介绍了2025年国内贵金属交易平台安全榜TOP10,重点推荐了宝富金业等优质平台。贵金属交易因其避险属性和增值潜力成为投资者优选,而选择安全可靠的平台是关键。宝富金业凭借技术创新、严格风控和优质服务荣登榜首,其他上榜平台如盛世金典、金瑞祥和国泰金业等也各具特色,提供多样交易品种、先进技术和专业服务。文章强调,随着金融市场变化和投资者需求多样化,这些优质平台将继续秉持安全、稳健、创新的理念,为投资者提供高效便捷的贵金属交易服务,助力实现财富增值。

  • 2025十大贵金属投资平台安全排行榜 炒黄金正规平台TOP10揭晓

    2025年全球经济不确定性加剧背景下,贵金属作为避险资产配置价值凸显。文章重点分析了现货黄金与白银的投资优势,并发布《2025十大贵金属投资平台安全排行榜》,从合规资质、交易系统稳定性、资金安全等维度评估。安环球凭借多年深耕、合规资质和稳定交易系统位列榜首,富得贵金属、美建智汇等平台分列其后。文章提醒投资者需警惕"黑平台",选择具备监管资质、用户口碑良好的正规平台,特别在市场波动期更应关注系统稳定性和出入金效率。

  • 企业如何低成本搭建可快速响应的远程技术支持平台?

    文章探讨了极端天气下企业技术支持的转型需求,重点介绍了远程技术支持的解决方案。传统线下服务面临出行困难、安全隐患等问题,而远程技术支持能实现设备监测、故障排查等操作,保障人员安全。贝锐向日葵推出的远程控制方案具有高效稳定、快速响应等特点,支持文件传输、工单流转等功能,并与ITSM平台深度整合,形成闭环服务体系。方案还提供团队版共享机制,适合初创团队低成本使用。在极端天气频发的当下,远程方案能显著提升企业抗灾能力,实现降本增效。

  • 2025全球B2B电商平台行业调查报告‌

    报告分析了全球B2B电商平台的现状与发展趋势。主要内容包括:1)B2B平台打破地域限制,实现全球商品交易和信息交流;2)主要功能涵盖信息服务、交易服务和增值服务;3)运营模式分为信息服务、交易服务和综合服务三类;4)以阿里巴巴国际站、TradeKey等平台为例,分析其商业模式;5)未来趋势包括技术驱动变革、跨境交易兴起、供应链整合优化等。报告指出B2B平台正成为企业拓展国际市场的重要桥梁,建议企业充分利用平台资源提升竞争力,同时呼吁加强行业监管。

  • iTAP完成“大考”,这些应用场景将率先落地!

    2025年7月11日,首届iTAP测试大会在西安成功举办。华为、支付宝、华大电子等产业链头部企业共同完成了支付、门禁、票务三大场景下的协议互通性验证,标志着iTAP技术正式通过商用化验证。华为Pura80手机和Watch GT5智能手表成为首批通过全部测试的设备。测试结果显示,iTAP技术突破传统NFC协议痛点,交互效率提升300%,支持存量设备通过软件升级接入,显著降低硬件迭代成本。产业协同效应显现,多家芯片厂商已制定明确技术路线图,加速生态布局。未来iTAP技术将在智慧交通、数字生活等领域加速商业化落地,ITMA协会拟于2025年第四季度再次举办测试大会,持续推动产业协同发展。

  • 蚂蚁AQ推出iOS版:24小时火速登顶苹果应用榜

    近日,蚁集团旗下AI健康应用正式推出iOS版。 上线不到24小时,火速攀升至苹果应用商店医疗榜榜首,超越小荷AI医生、京东健康等应用,成最受欢迎医疗健康应用。 据悉,AQ是蚂蚁在医疗健康领域的战略级应用,通过自研医疗大模型能力,向用户提供寻医、问诊、读报告、测健康等上百项AI服务,同时与近百万真实医生、超5000家公立医院等专业服务链接。 此前,AQ在6月26日�