使用XML定制Ribbon的一点小前奏(稍微再进一步的理解XML)

定制文档级Ribbon界面的实现思路:

1、excel的文件使用rar+xml的形式保存在本地。

2、用压缩软件打开文件,以规范的格式直接编缉或添加xml文件

3、使用excel文件时,主程序会解析xml文件,根据内容加载数据,包括Ribbon功能区的元素

一、XML是啥

  1、XML就是一个小型数据库,可以用文本文件持久化保存数据。

  2、XML用文本格式保存数据,使它可以兼容不同平台。

  3、有意义的标签使它既保留了扩展性,同时也更易读。

  4、XML本身是一个对象,其中的每一个元素也都是对象(DOM),可以映射到表格数据

  5、XML还有表达对象之间的关系的能力(别忘了它就是数据库,可以说它也是一个关系型数据库)

  6、数据验证技术(schema)保证数据的完整性

和XML有关的技术太多了,一辈子可能也学不完。

二、面向对象的XML

下面的简单示范可以看出普通表格、XML、和使用代码写的“类”有互相转化的能力。

1、excel和xml分别如何表示人类

Name Gender age Hobby
刘备 32 哭鼻子
关羽 30 耍大刀
张飞 28 卖猪肉
<Persons>
    <Person name="刘备" gender="男"  age="32" hobby="哭鼻子"/>
    <Person name="关羽" gender="男"  age="30" hobby="哭鼻子"/>
    <Person name="张飞" gender="男"  age="28" hobby="哭鼻子"/>
</Persons>

  a、每一个Person元素和excel表中的数据行对应。

  b、每一个Person元素都有和excel列名对应的属性。

2、使用vba代码表示人类

类模块:Person(实体类)。

Public name As String
Public age As Integer
Public gender As String
Public hobby As String

标准模块:VBPerson。NEW一个人类的具体对象(类的实例),这个对象和excel的行“对应”

(数据库表中的列可以称为“域--Filed”,表中的每一行可以称为“实体--Entity”)

Dim p1 As New Person
    p1.name = "刘备"
    p1.age = 32
    p1.gender = "男"
    p1.hobby = "哭鼻子"

  a、excel表格的列名和类中的“变量--字段”(这里没有使用属性,但使用属性更合适)有映射关系,同样的和XML也有对应关系。

b、每New一个Person都对应着excel中的一行,也对应着XML中的一个元素。

注:实体类(modal)没有行为,只用来保存数据。表格中的数据也没有行为,XML定制Ribbon虽然有类似OnAction这样的东东,个人感觉也应该理解为属性,不过这个属性的值对应了回调的方法名。

二、XML中的对象和Ribbon元素之间的关系

Ribbon做为对象的容器,他能容纳的对象种类很多。tab(标签)、group(分组)、menu(菜单按钮)、button(按钮)等。

1、这些对象都可以用XML元素来映射,比如button在XML中可以这样表示

<button id="btn" label="我的按钮">

2、也可以表达对象之间的关系,比如一个group(分组)下有一个menu按钮,menu按钮中有两个button

<group id="CustomGroup" label="自定义分组">
   <menu id="CustomMenu">
      <button id="btn1" label="按钮一"/>
      <button id="btn2" label="按钮二"/>
   </menu>
</group>

补充:Composite设计模式

Ribbon中的元素的关系比较符合Composite设计模式。用树状结构表达“容器+子容器+...+对象”这样的复杂结构。

时间: 2024-10-06 12:14:09

使用XML定制Ribbon的一点小前奏(稍微再进一步的理解XML)的相关文章

新闻发布的一点小总结

经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾.下面是我的一点小总结,不足之处请勿见笑... 我们想要完成一个新闻发布,首先要使其能够成功发布,并且让它能够实现添加.删除.修改.查询.上传.下载等功能.我们还调用AJAX功能查看输出为XML.JSON格式的新闻内容.为完成以上功能,我们首先要进行jdk.tomcat.eclipse的安装和配置.1.各软件的安装和配置1.1.jdk的安装和配置: 1.1.1.下载jdk:下载地址:http://www.oracle.co

私人定制javascript中数组小知识点(Only For Me)

先上笑话,1.刚看到一个游泳的,想起公司组织去三亚旅游,老板跳海里,各种挣扎,捞上来老板第一句话:我记得我会游泳的啊. 2.媳妇说:老公对不起,我把你新买的自行车撞散架了! 老公:没事宝贝,你若安好,便是晴天! 媳妇说:老公你太有诗意了. 老公:滚犊子,安不好我整死你! 数组的概念 javascript数组是值得有序集合,不过它实属一个javascript对象的特殊形式,这是一个很重点的定性. 创建数组 1.var a=new Array();//等同于[] 2.var a=new Array(

私人定制javascript中对象小知识点(Only For Me)

废话不多讲,先上笑话,然后再,.看懂这个的说明你的节操已经不再了. 晚饭后去理发店理发...割了吧...老板问我怎么剪,我悠悠的来一句往帅了剪...高潮往往令人想不到....旁边一在焗油烫头发的大妈说到 别这样为难老板,人家赚点钱不容易...首先如果你是高手那么请出门右转,如果你是菜鸟那么恭喜你,go on吧 全局对象在javascript程序中任何位置,都可以拈来就用的这种东西,是全局对象的属性.那么属性所在的对象也就是全局对象了.当javascript解释器启动时(或者任何Web浏览器加载新

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

【搬运工】一点小收集

1.几种基础算法. 2.数学之美. 3.贝叶斯方法. 转自互联网,链接背后都是故事,水深,都是鱼. 敬意且谨以自勉,长途漫漫,任重道远. 以上. [搬运工]一点小收集,布布扣,bubuko.com

Lichee (六) 配置内核时的一点小优化

我们在分析<Lichee(二) 在sun4i_crane平台下的编译 >的时候,居然没有一个步骤是在配置内核 make ARCH=arm menuconfig 仔细的读过的代码的会发现,在build_kernel有这么一段话 if [ ! -e .config ]; then echo -e "\n\t\tUsing default config... ...!\n" cp arch/arm/configs/sun4i_crane_defconfig .config fi

给Javascript初学者的一点小建议

本文来自e良师益友网 一般初学JavaScript的时候最头痛的就是浏览器兼容问题.在Firefox下面好好的代码放到IE就不能显示了,又或者是在IE能正常显示的代码在firefox又报错了. 如果你正初学JavaScript并有着一样的处境的话建议你:初学JavaScript的时候无视DOM和BOM的兼容性,将更多的时间花在 了解语言本身(ECMAScript).只在特定浏览器编写代码(Chrome/Firefox/Safari),实际工作中使用成熟的 JavaScript框架(jQuery等

C++ 中有关const引用的一点小知识

在读<C++ Primer>时,发现之前对const的概念不是很清晰,只知道如何去使用,于是翻开const引用部分又阅读了一遍,发现有两点自己要注意的地方 1.const限定的对象不可以初始化非const引用 ex. 1 const int src = 512; 2 const int &ok_dest = src; //ok: 引用和初始化对象都是const 3 int &err_dest = src; //error : 引用为非const 原因很简单, src 是不可以被

一点小心得

项目中会遇到这样的逻辑处理:根据不同类型调用不同的方法,通常会用到if else等语句,感觉不太好: 1,应该面向接口编程 2,尽量避免使用if语句 实例:原来代码,接口Iservice的实现类有 ServiceA ,ServiceB,ServiceC public static void main(String[] args) { String type = "C"; Iservice service = null; if (type.equals("A")) {