|
|
#pragma once
|
|
|
|
|
|
#include <QStringList>
|
|
|
#include <QtXml/QDomDocument>
|
|
|
#include "iXmlBase_global.h"
|
|
|
|
|
|
// xml文件解析基类
|
|
|
class I_XML_BASE_EXPORT iXmlUtilBase
|
|
|
{
|
|
|
public:
|
|
|
|
|
|
/// @brief 解密并解析xml文件
|
|
|
/// @param (out) doc 明文xml载体
|
|
|
/// @param (in) sFile文件路径
|
|
|
/// @param (in) bAdvanceMode,高级模式 自动进行加密解密处理,如果为false,则直接xml文件
|
|
|
/// @note 关于sFile路径说明,
|
|
|
/// 格式可以是xml也可以是dat格式,当 bAutoEncMode = true 时,
|
|
|
/// 后台会自动换为dat格式,逻辑如下
|
|
|
/// 路径为 $/Bin/Config/WTAI/BtnCmds.xml
|
|
|
/// 如果不存在,则从$/Bin/Config/Common中查找BtnCmds.dat
|
|
|
/// 即:模块本身如果配置,则走模块本身,否则走通用
|
|
|
static bool openAndLoadXml(QDomDocument& doc, \
|
|
|
QString& sFile, \
|
|
|
bool bAdvanceMode = true);
|
|
|
|
|
|
/// @brief 把Xml按照规范的属性顺序进行重新组织(该函数只在属性提取时调用,其它暂无调用)
|
|
|
/// @param (in) sFileSrc,源xml文件
|
|
|
/// @param (in) sFileDest,目标xml文件
|
|
|
/// @param (in) listOrderedAttributes,按照哪些属性进行排序
|
|
|
/// @param (in) backUpMode,是否备份原先
|
|
|
/// @note Qt Xml写起来方便(而且可以灵活遍历),但不支持属性顺序
|
|
|
/// QtXmlWriter支持顺序,但写的时候只能流模式
|
|
|
/// 故采用本函数进行一次转换
|
|
|
static bool reOrderXml(QString sFileSrc, QString sFileDest, \
|
|
|
QStringList listOrderedAttributes, \
|
|
|
bool backUpMode = true);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
/// @note 关于sDat路径说明,后台会自动换为dat格式
|
|
|
/// 路径为 $/Bin/Config/WTAI/BtnCmds.dat
|
|
|
/// 如果不存在,则从$/Bin/Config/Common中查找BtnCmds.dat
|
|
|
/// 即:模块本身如果配置,则走模块本身,否则走通用
|
|
|
static bool verifyDatFilePath(QString& sDat);
|
|
|
|
|
|
private:
|
|
|
|
|
|
// 内部排序转换函数(reOrderXml中进行调用)
|
|
|
static void orderXmlNode(const QDomNode* pNode, \
|
|
|
QXmlStreamWriter& writer, \
|
|
|
QStringList& listOrderedAttributes);
|
|
|
static void orderXmlAttribute(const QDomElement* pNode, \
|
|
|
QXmlStreamWriter& writer, \
|
|
|
QStringList& listOrderedAttributes);
|
|
|
|
|
|
|
|
|
};
|