您的位置:首页 > 编程语言 > Qt开发

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();

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: