楼主 gouweicao78 |
XML是扩展标记语言(Extensible Markup Language)的缩写,最初由W3C发布。XML不是真正的编程语言,因为它缺乏执行操作的某种机制,相反,XML是一组规则,其意图是简化跨平台的数据共享。 Office 2007文件以Microsoft的OpenXML格式发布,是包含几个XML文件的一个简单的压缩容器。使用XML格式的文件具有下列优点: (1)XML文件能够明显地节省空间。 (2)通过XML结构化数据后,能够快速地被索引,因而能使其他程序通过索引搜索到特定的字符串或其他项目。 (3)对于开发者来说,能够链接某个应用程序里的XML架构来验证XML而确保代码像意料中的那样工作。例如前面介绍的CustomUI Editor和XML 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过程。 1、id属性 在创建额外的对象之前,需要探讨如何在代码中识别这些对象。而id属性用于识别在自定义XML代码内特定的对象,为其提供名称,使得后面能够使用该名称引用该对象。这是引用对象的唯一方法。在下列容器中每个对象都需要id属性: n contextualTabs n officeMenu n qat n tabs id属性有几种不同的类型并且每一个都有不同的用途。下面列出了id属性的不同类型及其主要用途。 n id属性用于唯一地标识控件。如果动态地装载项目,其属性将被赋值。 n idMso属性用于唯一地标识内置控件、选项卡、命令,等等。使用该属性与内置对象交互。 n idQ属性用于跨共享的命名空间引用对象。 为了识别某对象,只需简单地在开始标签中添加id属性,例如,要通过id引用某选项卡,使用下列XML: <tab id=”rxtab” <!—放置其它的选项卡属性! –> </tab> 同样地,如果试图引用内置的字体(Font)组,则使用下面的XML: <group idMso=”Font” <!—放置其它的组属性! –> </group> 注意,所有的id和idQ属性都是唯一的。如果使用已存在的id,或者由Microsoft保留的id,将会导致错误并阻止装载自定义用户界面。 为了避免与内置的控件相冲突,建议所有自定义控件使用标准的命名约定加上前缀。 2、label属性 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”/> 上面的问题在于注释被插入到了未关闭的代码块中。 |
2楼 omnw |
阅读完毕,留下脚印 |