DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fansxs
今日帖子: 12
在线用户: 20
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2018/8/10 10:32:52
标题:
【原创分享】XML格式化解释和编辑器——XMLBuilder 浏览:322
加入我的收藏
楼主: 这东西的制作初衷是一个游戏工具,准确来说是上古卷轴5的fomod配置文件编辑器。
但是经过深度开发之后,得到了一个可以用于所有XML文件的格式化解释和编辑,特在此分享。

首发:9DM上古卷轴特别版版区

当前版本:1.01D
作者:天道玄虚(Reniastyc de El Magnifico)
框架:Delphi-Firemonkey

特性:
——泛用性:依据模板文件格式化解析和编辑XML文件,只要有合适的模板,理论上可以适用于任何XML文件。
——多语言:支持翻译文件,可以自定义程序语言。

UI界面(ver1.01D)
按此在新窗口浏览图片

如果没有载入任何模板,那么读取效果如图(XML文件为上古卷轴5的某一个fomod配置文件)
按此在新窗口浏览图片

选定相对应的模板之后,可以得到如下结构:
按此在新窗口浏览图片

可以看到其中繁琐的结构被模板定向解析,全部包含在属性中。

可以凭借这个特性更好地编辑和浏览XML文件。

翻译文件规范:
目前该程序支持简体中文,繁體中文,English。三种语言。翻译文件位于Data\Languages\
格式如下:
$New  新建
$Open  打开
$Save  保存
$Exit  退出
$Attrib  属性
$Value  值
$Lang  语言
$PreIn  预设
$Item  项目
$AddCI  添加子项
$ClrCI  清空子项
$DelTI  删除该项
$NewAt  新建属性
$OStru  原始结构
$PStru  预设结构
$PFile  预设文件
$BaseP  基准路径
请注意,$开头的词为识别词,后续的词为显示的词条,二者之间用tab(#9)分隔,而不是空格。

预设模板文件规范:
目前自带的模板文件包括Fomod信息文件和Fomod配置文件。位于Data\PreInstall
预设模板文件同样是一个xml文件,必须含有名称为【xmlbuilder】的文件头。

为识别预设模板作用的对象,第一个子项应与对象文件的文件头有着相同的名称和属性。例如fomod config文件的文件头:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:non_amespaceSchemaLocation="http://qconsulting.ca/fo3/ModConfig5.0.xsd";/>

因此,作用于fomod config文件的预设模板应:
<xmlbuilder>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:non_amespaceSchemaLocation="http://qconsulting.ca/fo3/ModConfig5.0.xsd";/>
    ...
</xmlbuilder>

第二个子项目之后,子项目名称均为【structure】,分别代表每一级项目的模板结构,可以包含两项属性:folder,unique。
【folder】的值应为下一级子项所在的目录,例如fomod config中,第一级的【folder】应等于:installSteps
而第二级则为:installStep\optionalFileGroups

【structure】的子项目决定解读规则,对每一个子项解释如下:
若子项有属性,则该项为属性声明,即对应于原本属于父项目的属性。其名称与父项目属性名相同,属性决定解读方式。
若子项没有属性,则该项为项目目录结构,对应于父项目所包含的目录。

属性声明中,需要定义一下参数:

flag:决定属性的类别,包括:
【】选项:option:A|B|C(A、B、C为具体选项名)
——1.01B:当属性声明的flag标识为option时,tag应分别包含标签和选项标签,并以“|”分割,例如:<type flag="option:SelectAny|SelectOnlyOne" tag="Select Type|Select Any|Select Only One"/>
【】文段:paragraph
【】文本:text
【】文件:file
【】路径:path
【】隐藏:hide(不会被显示)
【】名字:name(拥有该标识的属性,其值将作为项目名,覆盖之前的指定,原则上不应多次指定)
tag:决定属性的显示标签,当希望翻译预设文件时,应翻译此项。
default:决定属性默认值,当新建属性时默认设定的值,隐藏属性应指定默认值。
text:当该项属性对应于项目文本时,应设定为true,同时该条属性声明的名称应为text。例如:
对于moduleName这一项,需要的值为项目文本,则声明应写作:
<moduleName>
        <text flag="name" tag="" text="true" default="New Module"/>
</moduleName>

编写模板文件关键在于定义好每一级项目的显示属性、子项所在以及隐藏属性。需要注意经过格式化解析后相当于成为另一个xml文件,解析后的文件不应该缺失信息,否则在反向解析的时候将会有错漏。

如果遇到任何问题,欢迎在此反馈,或者致信电子邮箱:elmagnifico@vip.qq.com

分享源代码,请勿在未征得原作者(本座)同意时擅自修改、发布另外的版本。
商业用途请与原作者协商。

天道玄虚谨上

百度网盘:链接:https://pan.baidu.com/s/1W23-z0CZvnfOVJKd7annEg 密码:7c8u
此帖子包含附件:
PNG 图像
大小:15.8K
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2018/8/10 12:31:59
1楼: 这个可以跨平台吗?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2018/8/10 13:39:25
2楼: 感谢楼主的无私分享!
----------------------------------------------
虽千万人吾往矣!
作者:
男 reniastyc (天道玄虚) ▲△△△△ -
注册会员
2018/8/10 14:22:49
3楼: 要跨平台的话,你需要把获取版本的部分去掉,核心代码应该可以跨平台,但是程序主体在获取自身版本这一步用到了winapi,所以跨不了。
----------------------------------------------
--O, ye Magnificient Deity's Miracle!
--I'm yet Reniastyc de El Magnifico.
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行15.625毫秒 RSS