QT xml文件转化lua table文件 工具
2014-12-16 15:32
495 查看
经过两天的奋战,xml 文件 转化为lua table 的工具终于搞成了。
先上代码:
xmltoluatool.h
xmltoluatool.cpp
下载:http://download.csdn.net/detail/langzi007008/8266323
先上代码:
xmltoluatool.h
#ifndef XMLTOLUATOOL_H #define XMLTOLUATOOL_H #include <QtWidgets/QMainWindow> #include "qdom.h" #include "ui_xmltoluatool.h" class XmlToLuaTool : public QMainWindow { Q_OBJECT public: XmlToLuaTool(QWidget *parent = 0); ~XmlToLuaTool(); private: Ui::XmlToLuaToolClass ui; QString inPath; QString outPath; QList<QFileInfo> *xmlFileInfo; QFile *sourcefile; QString sourceData; QString desData; QString desTableName; QString log; bool result; private slots: void selectXmlDir(); void selectluaDir(); bool makeLuaFiles(); private: void init(); bool XmlToLuaTool::parseXml(QString file_name); QString makeLuaString(QString str); bool writeContentToFile(QString str,QString fileName); }; #endif // XMLTOLUATOOL_H
xmltoluatool.cpp
#include "stdafx.h" #include "xmltoluatool.h" XmlToLuaTool::XmlToLuaTool(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); sourceData = ""; connect(ui.SelectXmlDirButton,SIGNAL(pressed()),this,SLOT(selectXmlDir())); connect(ui.SelectLuaDirButton,SIGNAL(pressed()),this,SLOT(selectluaDir())); connect(ui.OutputButton,SIGNAL(pressed()),this,SLOT(makeLuaFiles())); } XmlToLuaTool::~XmlToLuaTool() { if(xmlFileInfo) { xmlFileInfo = NULL; delete xmlFileInfo; } } void XmlToLuaTool::selectXmlDir() { inPath=QFileDialog::getExistingDirectory(NULL, NULL,"D:\\",QFileDialog::ShowDirsOnly); if(inPath.isEmpty()) { QMessageBox::information(NULL, QString("title"), QString("please select xml folder!")); return; } ui.XmlDirPath->setText(inPath); ui.XmlDirPath->show(); } void XmlToLuaTool::selectluaDir() { if(inPath.isEmpty()) { QMessageBox::information(NULL, QString("title"), QString("please select xml folder!")); return; } outPath=QFileDialog::getExistingDirectory(NULL, NULL,"D:\\",QFileDialog::ShowDirsOnly); if(outPath.isEmpty()) { QMessageBox::information(NULL, QString("title"), QString("please select out folder!")); return; } ui.LuaDirPath->setText(outPath); ui.LuaDirPath->show(); } bool XmlToLuaTool::makeLuaFiles() { QDateTime time_ = QDateTime::currentDateTime();//获取系统现在的时间 QString str_ = time_.toString("yyyy-MM-dd hh:mm:ss ddd"); //设置显示格式 qDebug()<<str_; if(outPath.isEmpty()) { QMessageBox::information(NULL, QString("title"), QString("please select folder!")); return false; } //判断路径是否存在 QDir dir(inPath); if(!dir.exists()) { return false; } //获取所选文件类型过滤器 QStringList filters; filters<<QString("*.xml"); //定义迭代器并设置过滤器 QDirIterator dir_iterator(inPath, filters, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); //循环操作文件 while(dir_iterator.hasNext()) { //初始化 init(); dir_iterator.next(); QFileInfo file_info = dir_iterator.fileInfo(); QString absolute_file_path = file_info.absoluteFilePath(); if (this->parseXml(absolute_file_path)) { if(writeContentToFile(desData,desTableName)) { log.append(desTableName); log.append(".lua make success!\r"); }else { QString tmp = desTableName; tmp.append(".lua make fail!\r"); log.append(tmp); } } } //记录日志 ui.LogBrower->setText(log); ui.LogBrower->show(); QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss ddd"); //设置显示格式 qDebug()<<str; } bool XmlToLuaTool::parseXml(QString file_name) { QFile file(file_name); if(!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::information(NULL, QString("title"), QString("open error!")); return false; } QXmlStreamReader reader; // 设置文件,这时会将流设置为初始状态 reader.setDevice(&file); //拼接table头 int startIndex = file_name.lastIndexOf("/"); QString tableName = file_name.mid(startIndex+1); tableName = tableName.mid(0,tableName.lastIndexOf(".")-1); desTableName = tableName; tableName.append("=\r{"); QString tmp = "t_";//由于lua table 不支持纯数字命名 makeLuaString(tmp.append(tableName)); // 如果没有读到文档结尾,而且没有出现错误 while (!reader.atEnd()) { // 读取下一个记号,它返回记号的类型 QXmlStreamReader::TokenType type = reader.readNext(); // 下面便根据记号的类型来进行不同的输出 if (type == QXmlStreamReader::StartDocument) { qDebug() << reader.documentEncoding() << reader.documentVersion(); } if (type == QXmlStreamReader::StartElement) { QString _name = " "; _name.append(reader.name()); _name.append("={"); makeLuaString(_name); QXmlStreamAttributes attributes = reader.attributes(); if (attributes.count() > 0) { for (int i = 0;i<attributes.size();i++) { QXmlStreamAttribute attribute = attributes.at(i); QString attributeName = " "; attributeName.append(attribute.name()); attributeName.append("=\""); attributeName.append(attribute.value()); attributeName.append("\","); makeLuaString(attributeName); } } } if (type == QXmlStreamReader::Characters||QXmlStreamReader::Comment) { QString tmp = ""; tmp.append(reader.text()); makeLuaString(tmp); } if (type == QXmlStreamReader::EndElement) { makeLuaString("},"); } } makeLuaString("\r}"); // 如果读取过程中出现错误,那么输出错误信息 if (reader.hasError()) { qDebug() << "error: " << reader.errorString(); return false; } file.close(); //qDebug() << desData; return true; } QString XmlToLuaTool::makeLuaString(QString str) { //qDebug()<<str; desData.append(str); return desData; } bool XmlToLuaTool::writeContentToFile(QString str,QString fileName_) { if(str.isEmpty()) { QMessageBox::information(NULL, QString("title"), QString("the sourceData is empty!")); return false; } QString fileName = outPath; fileName.append("/"); fileName.append(fileName_); fileName.append(".lua"); QFile file(fileName); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this,"","can't open",QMessageBox::Yes); return false; } QTextStream in(&file); in<<str;//如果写多行,同上循环即可 file.close(); return true; } void XmlToLuaTool::init() { sourcefile = nullptr; sourceData = ""; desData = ""; desTableName = ""; result = false; }代码已经测试通过,用QT 做的UI,有不对的地方请大家多多指教。
下载:http://download.csdn.net/detail/langzi007008/8266323
相关文章推荐
- Java对象与XML文件之间相互转化(含源代码)
- 从xml文件中加载grid.table or tree js
- C#将XML+XSL文件转化为HTML文件的类
- C# 利用自带xsd.exe工具操作XML-如通过XML生成xsd文件
- 将Qt工程文件转成VC工程文件的小工具
- Hibernate工具生成.hbm.xml及.java文件
- 在Asp.Net中如何将从SQL读出来的表转化成XML文件并保存在指定的位置中
- 利用Hibernate工具,通过xml文件自动创建表
- 使用C++把文件夹目录信息转化为XML文件
- Qt 使用QDomDocument操作xml文件
- 把HTML表单提交的数据转化成XML文件
- 用asp实现把文件打包成Xml文件包,带解包的ASP工具附下载
- 各种视频文件的转化工具
- Ubuntu中文件编码转化工具 enca
- 把HTML表单提交的数据转化成XML文件
- XML 2 Class [xml 转化为 序列化代码工具]
- 如何将关系数据库(sql sever2005)中的表结构转化为XML架构进而生成XML文件???
- C#将XML+XSL文件转化为HTML文件的类
- 文件转化工具【增强】
- 读取Excel 文件 转换为(DataSet)DataTable,在转化成.xml文件