QT中对XML的处理
2016-02-29 17:15
323 查看
QT自带例子:
C:\Qt\Qt5.5.1\Examples\Qt-5.5\widgets\itemviews\simpledommodel\simpledommodel.pro
C:\Qt\Qt5.5.1\Examples\Qt-5.5\xml\dombookmarks\dombookmarks.pro
readXmlFile(m_initFolderPath+"/"+m_xmlFileName);
void MainWindow::readXmlFile(QString fileName)
{
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug()<<"open file"<<fileName<<"failed, error:"<<file.errorString();
return;
}
QDomDocument document;
QString strError;
int errLin = 0, errCol = 0;
if( !document.setContent(&file, false, &strError, &errLin, &errCol) )
{
qDebug()<<"parse file failed at line"<<errLin<<",column"<<errCol<<","<<strError;
return;
}
if( document.isNull() )
{
qDebug()<<"document is null !";
return;
}
QDomElement root = document.documentElement();
qDebug()<<root.tagName();
QDomElement catalogs = root.firstChildElement();
if( catalogs.isNull() )
{
return;
}
else
{
//qDebug()<<catalogs.tagName();
}
while(!catalogs.isNull())
{
foreachElement(catalogs);
catalogs = catalogs.nextSiblingElement();
}
file.close();
}
void MainWindow::foreachElement(QDomElement catalogs)
{
if(catalogs.tagName()=="")
return;
//qDebug()<<catalogs.tagName();
if(catalogs.hasAttributes())
{
QDomNamedNodeMap map = catalogs.attributes();
if(catalogs.tagName()==NodeSystemButton)
{
createSystemButton(map);
}
else if(catalogs.tagName()==NodeSAction)
{
createSAction(map);
}
else if(catalogs.tagName()==NodeRibbonPageSystemPopup)
{
createRibbonPageSystemPopup(map);
}
else if(catalogs.tagName()==NodeSRAction)
{
createSRAction(map);
}
else if(catalogs.tagName()==NodeRibbonQuickAccessBar)
{
createQuickAccessBar(map);
}
else if(catalogs.tagName()==NodeExitsAction)
{
bindingExitsAction(map);
}
else if(catalogs.tagName()==NodeQuickAction)
{
createQuickAction(map);
}
else if(catalogs.tagName()==NodeRibbonPage)
{
createRibbonPage(map);
}
else if(catalogs.tagName()==NodeRibbonGroup)
{
createRibbonGroup(map);
}
else if(catalogs.tagName()==NodeOptionButtonAction)
{
}
else if(catalogs.tagName()==NodeQMenu)
{
createPMenu(map);
}
else if(catalogs.tagName()==NodeQAction)
{
createPMQAction(map);
}
else if(catalogs.tagName()==NodePageQAction)
{
createPageQAction(map);
}
else if(catalogs.tagName()==NodeRibbonStatusBar)
{
createRibbonStatusBar();
}
else if(catalogs.tagName()==NodeStatusAction)
{
createStatusAction(map);
}
}
if(catalogs.hasChildNodes())
{
for(int i=0;i<catalogs.childNodes().length();++i)
{
foreachElement(catalogs.childNodes().at(i).toElement());
}
}
}
QString MainWindow::getNodeValue(QDomNamedNodeMap map, QString key)
{
QString tempValue=map.namedItem(key).nodeValue();
if(key=="Icon")
tempValue=m_initFolderPath+"/"+m_imageFolder+"/"+tempValue;
return tempValue;
}
<?xml version="1.0" encoding="gb2312"?>
<xxx>
<!--0不显示此列 -->
<rrr>ttx1</rrr>
<tx test33="abc" test22="efg">1</tx>
</xxx>
QStringList MainWindow::SMSDXmlGet(QDomNodeList &value)
{
int cnt = value.count();
for(int i=0;i<cnt;i++)
{
QDomNode childNode=value.at(i);
QDomNode::NodeType ttype = childNode.nodeType();
QString nodeName = childNode.nodeName();
QString nodeValue= childNode.nodeValue();
QDomNamedNodeMap attributeMap = childNode.attributes();
QDomNode attribute = attributeMap.item(0);
QString s1= attribute.nodeName();
QString s2= attribute.nodeValue();
int tt;
}
QStringList ret;
return ret;
}
void MainWindow::pushButton_4Slot()
{
int i=0;
QString filePath="mytest.xml";
QFile file(filePath);
if (file.open(QIODevice::ReadOnly))
{
QDomDocument document;
if (document.setContent(&file))
{
QDomNode &RootDomNode = document;
int RootDomNodeChildsCnt = RootDomNode.childNodes().count();
for(int i=1;i<RootDomNodeChildsCnt;i++)
{
QDomNode childNode = RootDomNode.childNodes().item(i);
QDomElement ele = RootDomNode.firstChildElement("ServiceManageShowDlgSet");
QDomNode ttx = RootDomNode.namedItem("serviceCNName") ;
QString sttx = ttx.nodeValue();
QDomNodeList childList = ele.childNodes();
int cnt=childList.count();
QStringList sRet= SMSDXmlGet(childList);
int tt=99;
// int childListCnt = childList.count();
// QString nodeName = childNode.nodeName();
// QString nodeValue= childNode.nodeValue();
// QDomNamedNodeMap attributeMap = childNode.attributes();
// QDomNode attribute = attributeMap.item(i);
// QString s1= attribute.nodeName();
// QString s2= attribute.nodeValue();
}
}
file.close();
}
}
创建XML:
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QDomDocument doc("MyML");
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);
QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);
QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);
QString xml = doc.toString();
//qDebug()<<"xml"<<xml;
QFile file("mydocument.xml"); //! 如果没有此XML,会自动创建,如果有此XML,会覆盖此XML
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))
return 0;
QTextStream out(&file);
out.setCodec("UTF-8");
doc.save(out,4,QDomNode::EncodingFromTextStream);
file.close();
return 0;
}
C:\Qt\Qt5.5.1\Examples\Qt-5.5\widgets\itemviews\simpledommodel\simpledommodel.pro
C:\Qt\Qt5.5.1\Examples\Qt-5.5\xml\dombookmarks\dombookmarks.pro
readXmlFile(m_initFolderPath+"/"+m_xmlFileName);
void MainWindow::readXmlFile(QString fileName)
{
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug()<<"open file"<<fileName<<"failed, error:"<<file.errorString();
return;
}
QDomDocument document;
QString strError;
int errLin = 0, errCol = 0;
if( !document.setContent(&file, false, &strError, &errLin, &errCol) )
{
qDebug()<<"parse file failed at line"<<errLin<<",column"<<errCol<<","<<strError;
return;
}
if( document.isNull() )
{
qDebug()<<"document is null !";
return;
}
QDomElement root = document.documentElement();
qDebug()<<root.tagName();
QDomElement catalogs = root.firstChildElement();
if( catalogs.isNull() )
{
return;
}
else
{
//qDebug()<<catalogs.tagName();
}
while(!catalogs.isNull())
{
foreachElement(catalogs);
catalogs = catalogs.nextSiblingElement();
}
file.close();
}
void MainWindow::foreachElement(QDomElement catalogs)
{
if(catalogs.tagName()=="")
return;
//qDebug()<<catalogs.tagName();
if(catalogs.hasAttributes())
{
QDomNamedNodeMap map = catalogs.attributes();
if(catalogs.tagName()==NodeSystemButton)
{
createSystemButton(map);
}
else if(catalogs.tagName()==NodeSAction)
{
createSAction(map);
}
else if(catalogs.tagName()==NodeRibbonPageSystemPopup)
{
createRibbonPageSystemPopup(map);
}
else if(catalogs.tagName()==NodeSRAction)
{
createSRAction(map);
}
else if(catalogs.tagName()==NodeRibbonQuickAccessBar)
{
createQuickAccessBar(map);
}
else if(catalogs.tagName()==NodeExitsAction)
{
bindingExitsAction(map);
}
else if(catalogs.tagName()==NodeQuickAction)
{
createQuickAction(map);
}
else if(catalogs.tagName()==NodeRibbonPage)
{
createRibbonPage(map);
}
else if(catalogs.tagName()==NodeRibbonGroup)
{
createRibbonGroup(map);
}
else if(catalogs.tagName()==NodeOptionButtonAction)
{
}
else if(catalogs.tagName()==NodeQMenu)
{
createPMenu(map);
}
else if(catalogs.tagName()==NodeQAction)
{
createPMQAction(map);
}
else if(catalogs.tagName()==NodePageQAction)
{
createPageQAction(map);
}
else if(catalogs.tagName()==NodeRibbonStatusBar)
{
createRibbonStatusBar();
}
else if(catalogs.tagName()==NodeStatusAction)
{
createStatusAction(map);
}
}
if(catalogs.hasChildNodes())
{
for(int i=0;i<catalogs.childNodes().length();++i)
{
foreachElement(catalogs.childNodes().at(i).toElement());
}
}
}
QString MainWindow::getNodeValue(QDomNamedNodeMap map, QString key)
{
QString tempValue=map.namedItem(key).nodeValue();
if(key=="Icon")
tempValue=m_initFolderPath+"/"+m_imageFolder+"/"+tempValue;
return tempValue;
}
<?xml version="1.0" encoding="gb2312"?>
<xxx>
<!--0不显示此列 -->
<rrr>ttx1</rrr>
<tx test33="abc" test22="efg">1</tx>
</xxx>
QStringList MainWindow::SMSDXmlGet(QDomNodeList &value)
{
int cnt = value.count();
for(int i=0;i<cnt;i++)
{
QDomNode childNode=value.at(i);
QDomNode::NodeType ttype = childNode.nodeType();
QString nodeName = childNode.nodeName();
QString nodeValue= childNode.nodeValue();
QDomElement elem = childNode.toElement();
//elem.text();
qDebug() << "i==:" << i << "nodeName:" << nodeName << "nodeValue:" << nodeValue<< "NodeType:" << ttype<< "elem:" << elem.text();
}
QStringList ret;
return ret;
}
QStringList MainWindow::SMSDXmlGet(QDomNodeList &value)
{
int cnt = value.count();
for(int i=0;i<cnt;i++)
{
QDomNode childNode=value.at(i);
QDomNode::NodeType ttype = childNode.nodeType();
QString nodeName = childNode.nodeName();
QString nodeValue= childNode.nodeValue();
QDomNamedNodeMap attributeMap = childNode.attributes();
QDomNode attribute = attributeMap.item(0);
QString s1= attribute.nodeName();
QString s2= attribute.nodeValue();
int tt;
}
QStringList ret;
return ret;
}
void MainWindow::pushButton_4Slot()
{
int i=0;
QString filePath="mytest.xml";
QFile file(filePath);
if (file.open(QIODevice::ReadOnly))
{
QDomDocument document;
if (document.setContent(&file))
{
QDomNode &RootDomNode = document;
int RootDomNodeChildsCnt = RootDomNode.childNodes().count();
for(int i=1;i<RootDomNodeChildsCnt;i++)
{
QDomNode childNode = RootDomNode.childNodes().item(i);
QDomElement ele = RootDomNode.firstChildElement("ServiceManageShowDlgSet");
QDomNode ttx = RootDomNode.namedItem("serviceCNName") ;
QString sttx = ttx.nodeValue();
QDomNodeList childList = ele.childNodes();
int cnt=childList.count();
QStringList sRet= SMSDXmlGet(childList);
int tt=99;
// int childListCnt = childList.count();
// QString nodeName = childNode.nodeName();
// QString nodeValue= childNode.nodeValue();
// QDomNamedNodeMap attributeMap = childNode.attributes();
// QDomNode attribute = attributeMap.item(i);
// QString s1= attribute.nodeName();
// QString s2= attribute.nodeValue();
}
}
file.close();
}
}
创建XML:
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QDomDocument doc("MyML");
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);
QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);
QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);
QString xml = doc.toString();
//qDebug()<<"xml"<<xml;
QFile file("mydocument.xml"); //! 如果没有此XML,会自动创建,如果有此XML,会覆盖此XML
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))
return 0;
QTextStream out(&file);
out.setCodec("UTF-8");
doc.save(out,4,QDomNode::EncodingFromTextStream);
file.close();
return 0;
}
相关文章推荐
- Qt5_选择文件对话框
- Qt5_当前exe所在路径
- Qt5中文显示乱码问题
- mqtt协议即时消息服务端接收的消息缺少部分字节
- Qt动态库加载
- Ubuntu下QT的安装详细教程
- Qt信号函数无法解析的问题解决方法
- QT正规滚屏放单平台1241万人刷单18部诚信推荐
- GBK2UTF8 Qt的中文显示问题
- Qt配置opencv
- QT基本数据类型
- windows MINGW环境 编译Qt 库
- Qt创建新文件
- 判断文件夹,是否存在,不存在则创建Qt
- 判断文件夹,是否存在,不存在则创建Qt
- 一起看代码来玩玩QT之12 MainWindow(menubar menu ……)
- 一起看代码来玩玩QT之11 Dialog
- Qt使用的几个问题
- QT中关于JSON处理的几个类
- 使用qt时出现找不到模块错误