##关于XML
#### XML是什么?
XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(Markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。您创建的文件,或文档实例由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
*****
#### XML的语法
XML的语法非常简单,它是由标记(或称标签)和内容构成的。标记就是一些符号,用来表示特定的格式。而内容则可以是您需要存放的任意内容。
XML的语法很像HTML,XML文件通过不同的**元素(Element)**(或称节点)表示不同的信息,每个元素分别拥有元素名、属性、元素内容等功能。元素以开始标记和结束标记为分隔标志,下面我们结合一段XML代码进行一下分析。
~~~
<?xml version="1.0" encoding="UTF-8"?>
<!-- 注释,不是XML代码 -->
<Object Type="1" ID="1001" Text="Hello">
<SubObj Item="11">
哈哈哈
</SubObj>
</Object>
~~~
**首先要明确一点,XML是区分大小写的,这点要非常注意**。
XML的第一行一般为<?xml ... ?>,用于表示XML的信息,它一般包括版本号(version)和编码(encoding)。
<!-- 注释内容 --> XML中使用这种语法结构来表示对文档的注释。注释内容可以包含单行或者多行文本,注释中的内容将不按XML语法解析。
<Object>为开始标记,与之对应的加上结束标记符(/)的标记</Object>则是它的结束标记了,两个标记之间的就是元素的内容。
对于<Object Type="1" ID="1001" Text="Hello">来说,Object就是它的元素名,而Type、ID、Text就是它的属性,而等于号后面被引号包裹起来的部分则是属性对应的值。而因为它的内容里还拥有元素,所以此时Object元素就自动升格为SubObj的父元素,而SubObj则为Object的子元素。
对于SubObj元素来说,它的内容就为文字“哈哈哈”,并拥有一个Item属性 值为11。
在XML的语法中规定,如果一个元素的内容为空则可以简写,如<Obj id="1"></Obj>可以简写为<Obj id="1" />。
XML中的元素、属性的命名应当使用英文,并且避免使用数字和符号。
XML内容或属性值中若需要出现以下字符,应当使用其转义符进行替代,否则可能会导致解析错误。
| 字符 | 转义符 |
| -- | -- |
| ' | &apos; |
| " | &quot; |
| & | &amp; |
| < | &lt; |
| > | &gt; |
XML的补充知识可以参考:[W3School 的相关内容](http://www.w3school.com.cn/xml/index.asp)。
*****
### ExDirectUI为何要用XML进行界面布局?
1. XML的最大好处就是能清晰的声明出元素的父子关系,这和界面布局的结构是一样的。
2. 由于XML的属性自定义性很强,所以可以实现不同种类控件的不同参数的存储。
3. XML可以原生支持多种编码,在界面布局中使用Unicode码可以更好的支持多国语言。
4. XML相比JSON等支持结构化的语言来说,拥有良好的可读性和可维护性。
5. XML可以被Windows原生的DOM对象解析,省去编写布局文件解析模块的很多工作。
- 序言
- 基础
- 概念
- 术语
- 相关技术
- 入门
- 如何获取
- 环境需求
- 使用条件
- 开发规范
- 文件结构
- 让我们开始吧
- 全局命令
- 引擎命令
- Ex_Init
- Ex_UnInit
- Ex_XMLRegisterValueCallback
- Ex_XMLRegisterCallback
- Ex_GetLong
- 辅助命令
- Ex_SleepEx
- Ex_GetHash
- Ex_Atom
- 窗口命令
- 窗口相关
- Ex_WndRegisterClass
- Ex_WndCreate
- Ex_WndMsgLoop
- 皮肤相关
- Ex_DUIBindWindow
- Ex_DUICreateFromLayout
- Ex_DUILoadLayout
- Ex_DUIHandEvent
- Ex_DUIShowWindow
- Ex_DUIShowWindowEx
- Ex_DUIGetBkgColor
- Ex_DUISetBkgColor
- Ex_DUISetBkgImage
- Ex_DUIGetAlpha
- Ex_DUISetAlpha
- Ex_DUIGetSysCtl
- Ex_DUIGetObjFromID
- Ex_DUIGetClientRect
- Ex_DUIInvalidateRect
- Ex_DUIObjFromWindowPoint
- Ex_DUIObjFromScreenPoint
- Ex_DUIAddTrayIcon
- Ex_DUIPopupTrayIcon
- Ex_DUIPopupTipsEx
- Ex_DUIDeleteTrayIcon
- 关于布局文件
- 控件命令
- 控件基类
- 关于布局文件
- Ex_ObjCreate
- Ex_ObjCreateEx
- Ex_ObjDestroy
- Ex_ObjGetLong
- Ex_ObjSetLong
- Ex_ObjDispatchMessage
- Ex_ObjSendMessage
- Ex_ObjPostMessage
- Ex_ObjCallProc
- Ex_ObjDefProc
- Ex_ObjDispatchOwnerMessage
- Ex_ObjUpdate
- Ex_ObjInvalidateRect
- Ex_ObjBeginPaint
- Ex_ObjEndPaint
- Ex_ObjGethWnd
- Ex_ObjGethExDui
- Ex_ObjGethTheme
- Ex_ObjGetParent
- Ex_ObjSetParent
- Ex_ObjRegister
- Ex_ObjGetText
- Ex_ObjSetText
- Ex_ObjGetBkColor
- Ex_ObjSetBkColor
- Ex_ObjGetBkImageInfo
- Ex_ObjSetBkImageInfo
- Ex_ObjGetBkMode
- Ex_ObjSetBkMode
- Ex_ObjGetTextColor
- Ex_ObjSetTextColor
- Ex_ObjGetBorderColor
- Ex_ObjSetBorderColor
- Ex_ObjGetAlpha
- Ex_ObjSetAlpha
- Ex_ObjSetFont
- Ex_ObjSetRedraw
- Ex_ObjValidate
- Ex_ObjSetTimer
- Ex_ObjKillTimer
- Ex_ObjEnableScrollBar
- Ex_ObjGetScrollBar
- Ex_ObjGetScrollPos
- Ex_ObjSetScrollPos
- Ex_ObjGetScrollRange
- Ex_ObjSetScrollRange
- Ex_ObjGetTrackPos
- Ex_ObjGetScrollInfo
- Ex_ObjSetScrollInfo
- Ex_ObjGetClassNameA
- Ex_ObjGetClassNameW
- Ex_ObjGetRect
- Ex_ObjClientToWindow
- Ex_ObjMove
- Ex_ObjLockPos
- Ex_ObjIsVisible
- Ex_ObjShow
- Ex_ObjEnable
- Ex_ObjGetAnimationInfo
- Ex_ObjSetAnimationInfo
- Ex_ObjBeginAnimation
- Ex_ObjHandEvent
- Ex_ObjHandEventFromID
- 控件消息
- 介绍
- 属性分发
- 设置提示文本
- 获取提示文本
- 组件状态被改变
- 计算尺寸
- 获取Tab焦点区域矩形
- 绘制背景
- 绘制非客户区
- 绘制主题数据
- 系统控件
- 标题栏
- 图标控件
- 系统按钮
- 菜单
- 基础控件
- 标签
- 按钮
- 普通按钮
- 图形按钮
- 组图按钮
- 下拉按钮
- 图片框
- 链接框
- 选择框
- 三态选择框
- 单选框
- 分组框
- 进度条
- 滚动条
- 编辑框
- 丰富文本框
- 高级控件
- 组合框
- 列表框
- 选择夹
- 浏览框
- 扩展控件
- 绘图命令
- 关于绘图引擎
- 设备上下文
- 画布
- _excanvas_getlasterror
- _excanvas_setlasterror
- _excanvas_getlong
- _canvas_create
- _canvas_destroy
- _canvas_validate
- _canvas_beginpaint
- _canvas_endpaint
- _canvas_clear
- _canvas_drawimage
- _canvas_drawimagerect
- _canvas_drawimagerectrect
- _canvas_drawline
- _canvas_drawlinefrompen
- _canvas_drawimagefromdrawdata
- _canvas_drawimagegird
- _canvas_drawrectangle
- _canvas_fillrectangle
- _canvas_fillrectanglefrombrush
- _canvas_getdc
- _canvas_width
- _canvas_height
- _canvas_setbkmode
- _canvas_getbkmode
- _canvas_bitblt
- _canvas_bitblt_dc
- _canvas_alphablt
- _canvas_alphablt_dc
- _canvas_cliprect
- _canvas_cliphrgn
- _canvas_resetclip
- _canvas_savetofile
- _canvas_resize
- _canvas_drawrectanglefrompen
- _canvas_setfont
- _canvas_getfont
- _canvas_getlogfont
- _canvas_getpixel
- _canvas_calctextsize
- _canvas_drawtext
- _canvas_savetomemory
- _canvas_blur
- 图像
- _image_width
- _image_height
- _image_createfromfile
- _image_destory
- _image_createfromstream
- _image_selectactiveframe
- _image_getframecount
- _image_copy
- _image_copyrect
- _image_createfrommemory
- _image_savetofile
- _image_getframedelay
- _image_createfromhicon
- _image_create
- _image_savetomemory
- _image_lockbits
- _image_createfromhres
- 画笔
- _pen_create
- _pen_destory
- _pen_create_frombrush
- 画刷
- _brush_create
- _brush_destroy
- _brush_createfromimage
- _brush_create_lineargradientfrompoint
- 字体
- _font_createfromfamily
- _font_create
- _font_destroy
- _font_getlogfont
- _font_createfromlogfont
- 路径
- 区域
- 文本格式
- 效果
- 布局文件
- 关于XML
- 文件结构
- 特殊语法
- 主题文件
- 关于EXT
- 文件结构
- 贴图文件
- 描述文件
- 制作主题
- 相关命令
- Ex_ThemeLoad
- Ex_ThemeFree
- Ex_ThemepData
- Ex_ThemeGetData
- Ex_ThemeGetColor
- Ex_ThemeGetRect
- Ex_ThemeDraw
- Ex_ThemeDrawEx
- Ex_ThemeDispatchDrawEx
- 缓动特效
- 关于特效
- 缓动种类
- 相关命令
- 授权机制