细品RibbonX(13):初识XML

细品RibbonX(13):初识XML

资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659

 Loading ...

 

XML是扩展标记语言(Extensible Markup Language)的缩写,最初由W3C发布。XML不是真正的编程语言,因为它缺乏执行操作的某种机制,相反,XML是一组规则,其意图是简化跨平台的数据共享。

Office 2007文件以MicrosoftOpenXML格式发布,是包含几个XML文件的一个简单的压缩容器。使用XML格式的文件具有下列优点:

1XML文件能够明显地节省空间。

2)通过XML结构化数据后,能够快速地被索引,因而能使其他程序通过索引搜索到特定的字符串或其他项目。

3)对于开发者来说,能够链接某个应用程序里的XML架构来验证XML而确保代码像意料中的那样工作。例如前面介绍的CustomUI EditorXML Notepad,如果没有这些架构,CustomUI Editor将不能验证代码,XML Notepad也不能提供智能感知功能。

当然,我们之所以关心XML,是因为XML是功能区的核心。要定制Office 2007用户界面,必须编写XML代码。虽然VBA在定制界面时也能起到关键的作用,但它不是必需的。而XML在定制中几乎总是必需的,但也有例外。例如弹出式菜单和一些出现在加载项选项卡中的VBA定制。

下面,我们来了解如何构成XML代码,以及如何编写XML

标签(Tags

先看看下面的代码片断:

<group id="rxgrpTest">

<button idMso="Bold"/>

<button idMso="Italic"/>

<splitButton id="rxsbtnTest">

<button idMso="Underline"/>

</splitButton>

</group>

留意上面代码的结构,注意<>/号的使用,这些符号在XML中有特定的用途:指出了标签的开始和结束位置。例如,开始的<group>标签和结束的</group>标签之间的内容包含了在功能区中显示的组。

在组里面列出的splitButton标签使用与组相同的结构,以<splitButton>标签开始,接着包含了所有的项目直至由</splitButton>标签结束。本例中,仅仅下划线按钮出现在拆分按钮中。

现在,看看按钮本身的代码,注意到/号位于标签的结尾,这样就不需要单独的标签来关闭元素。

这里演示了用于开始和结束XML标签的两种方法。您需要理解和使用这两种方法来创建自定义UI的结构。如下所示:

开始和关闭标签分开:<element attribute(s)="Value"></element>

开始和关闭标签未分开:<element attribute(s)="Value"/>

通过上面的例子,应该了解到:

1)在XML中,每个标签至少包含一个元素并且通常至少有一个属性。

2)在处理代码时,涉及的每个项目都被称作对象(object)。例如,对象包括功能区中的组、按钮、复选框、甚至是菜单。许多对象都有子对象。当某控件有子控件时,该控件称作为父控件。注意,父对象通常(但不总是)有不同类型的子对象。选项卡有一个或多个组对象作为子对象,并且一个组可能有按钮、复选框和动态菜单子对象的组合。其中,dynamicMenu对象除了其他子对象类型外,还有dynamicMenu子对象。某些父对象甚至有完整的子对象群,称之为集合(collection)。

每个子对象同时也是它自已的子对象的父对象。每个子对象控件必须嵌套在其父对象的开始和结束标签中。并且,每个子对象仅可能有一个父对象。

3)为了创建格式良好(有效的)XML,必须理解:①所有的标签,无论是元素还是属性,都区分大小写,即SPLITBUTTON元素与splitButton元素不相同。②属性值必须被放置在单引号或双引号内。③在父元素中的子元素的嵌套必须准确,每个开始标签必须与其结束标签相匹配,或者使用"/>"结束在相同的标签内,或者在后面使用单独的标签。

元素(Elements

当处理功能区的XML时,可以看到每个元素指定功能区控件(或结构)的特定部分。

对于初学者来说不容易弄清楚标签和元素的区别,然而很容易定义:group是一个元素,而<group>是一个标签。因此,标签实质上是通过<>符号识别代码块的标志。

每个标签必须包括一个且唯一一个元素。此外,元素总是XML标签的第一部分,告诉编译器希望开始处理或者停止处理的特定项目。

属性(Attributes

标签告诉编译器要处理的对象,而属性告诉编译器该对象的特性,例如对象的名称、在屏幕中显示的标题以及是否对象可见。

与元素不同的是,在所给标签内可以为对象设置多个属性。例如,下面的代码片断显示了带有多个属性的标签示例:

<button id="rxbtnProtectAll"

size="normal"

label="Protect All Sheets"

imageMso="ReviewProtectWorkbook"

onAction="rxbtnProtectAll_click"/>

上面的代码提供给按钮一个唯一的id并指定了大小、标签文本和图像,还提供了一个onAction回调签名,当单击该按钮时启动相应的VBA过程。

1id属性

在创建额外的对象之前,需要探讨如何在代码中识别这些对象。而id属性用于识别在自定义XML代码内特定的对象,为其提供名称,使得后面能够使用该名称引用该对象。这是引用对象的唯一方法。在下列容器中每个对象都需要id属性:

         contextualTabs

         officeMenu

         qat

         tabs

id属性有几种不同的类型并且每一个都有不同的用途。下面列出了id属性的不同类型及其主要用途。

         id属性用于唯一地标识控件。如果动态地装载项目,其属性将被赋值。

         idMso属性用于唯一地标识内置控件、选项卡、命令,等等。使用该属性与内置对象交互。

         idQ属性用于跨共享的命名空间引用对象。

为了识别某对象,只需简单地在开始标签中添加id属性,例如,要通过id引用某选项卡,使用下列XML

<tab id="rxtab"

<!—放置其它的选项卡属性! –>

</tab>

同样地,如果试图引用内置的字体(Font)组,则使用下面的XML

<group idMso="Font"

<!—放置其它的组属性! –>

</group>

注意,所有的ididQ属性都是唯一的。如果使用已存在的id,或者由Microsoft保留的id,将会导致错误并阻止装载自定义用户界面。

为了避免与内置的控件相冲突,建议所有自定义控件使用标准的命名约定加上前缀。

2label属性

label属性指定用户能够在屏幕上读取的内容,它不必是唯一的,但应该合乎逻辑、简洁明了且一致。label属性为用户提供了清晰的向导。要为控件添加标签文本,使用下面所示的代码:

<tab id="rxtab"

label="My Custom Tab">

</tab>

XML代码的排版技巧

在编写代码时,建议使用硬回车或制表符将代码分成逻辑块,使代码更容易阅读和理解。看看下面的示例代码,非常清晰,更容易阅读:

<group

id="rxgrp"

label="My First Group">

  

<button

id="rxbtn1″

imageMso="Italic"

label="Large size button"

size="large"

onAction="rxbtn1_Click"/>

  

<button

id="rxbtn2″

imageMso="Bold"

label="Normal size button"

size="normal"

onAction="rxbtn2_Click"/>

  

<button

id="rxbtn3″

imageMso="WrapText"

label="Normal size button"

size="normal"

onAction="rxbtn3_Click"/>

  

<button

id="rxbtn4″

imageMso="ConditionalFormatting"

label="Normal size button"

size="normal"

onAction="rxbtn4_Click"/>

</group>

XML代码中创建注释

注释能够使自已或他人清楚代码的作用。

放置注释的方法是:在开始处放置一个小于号(<),然后输入感叹号(!),随后是两个连字号(),结束注释需要两个连字号加一个大于号(>),例如:

<!—这是一段注释 –>

如果注释很长,可能需要几行,那么可以按如下所示编写:

<!–

这是一段相当长的注释。因为您想使用长的注释解释这段代码有什么作用,各个符号代码什么意思,以帮助您以后好理解。

–>

<!––>之间的内容被当作连续的注释。

此外,不能够将注释放置在一块开始的XML代码的中间。下面的示例来进行演示:

<!—这是我的按钮 –>

<button id="rxbtn"

label="This is my button"

imageMso="HappyFace"

size="large"

onAction="rxbtn_Click"/>

或:

<button id="rxbtn"

label="This is my button"

imageMso="HappyFace"

size="large"

onAction="rxbtn_Click">

<!—这是我的按钮 –>

</button>

上述两段代码都是正确的,但下面的代码会产生错误:

<button id="rxbtn"

<!—这是我的按钮 –>

label="This is my button"

imageMso="HappyFace"

size="large"

onAction="rxbtn_Click"/>

上面的问题在于注释被插入到了未关闭的代码块中。

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值