“形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则:
XML 文档必须有根元素
XML 标签对大小写敏感XML 元素必须被正确的嵌套
XML 属性必须加引号
读取xml:
void analysisXML(QString str) { QDomDocument doc; QFile xmlFile(str); if(!xmlFile.open(QIODevice::ReadOnly)) { return; } //This function parses(解析) the XML document from the byte array data //and sets it as the content(内容) of the document. //It tries to detect(检测) the encoding(编码) of the document as required by the XML specification(规范). if(!doc.setContent(&xmlFile)) { xmlFile.close(); return; } xmlFile.close(); QDomElement element=doc.documentElement(); ///Returns the root element of the document. for(QDomNode node=element.firstChild(); !node.isNull(); node=node.nextSibling()) { QDomElement e=node.toElement(); qDebug()<<e.tagName()<<":"<<e.text(); } //QDomElement docEle=doc.documentElement(); //QDomNode n=docEle.firstChild(); //while(!n.isNull()) //{ // QDomElement e=n.toElement(); ///try to convert the node to an element // if(!e.isNull()) // { // qDebug()<<e.tagName()<<":"<<e.text(); // } // n= n.nextSibling(); //} xmlFile.close(); }
写xml:
void writeXML() { QFile file("writeXML.xml"); if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate)) { return; } QDomDocument doc; QDomProcessingInstruction instruction; instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild(instruction); QDomElement root=doc.createElement(QIODevice::tr("data")); doc.appendChild(root); QDomElement StartWeek=doc.createElement(QObject::tr("startweek")); QDomElement ReadNumber=doc.createElement(QObject::tr("readnum")); QDomElement AlarmTime=doc.createElement(QObject::tr("alarm")); QDomElement AlarmPrompt=doc.createElement(QObject::tr("prompt")); QDomText text; text=doc.createTextNode("2010-03-01"); StartWeek.appendChild(text); text=doc.createTextNode("2"); ReadNumber.appendChild(text); text=doc.createTextNode("10"); AlarmTime.appendChild(text); text=doc.createTextNode("vibration"); AlarmPrompt.appendChild(text); root.appendChild(StartWeek); root.appendChild(ReadNumber); root.appendChild(AlarmTime); root.appendChild(AlarmPrompt); QTextStream out(&file); doc.save(out,4); file.close(); }
如下xml:
<?xml version="1.0" encoding="UTF-8"?> <data> <startweek>2010-03-01</startweek> <readnum>3</readnum> <alarm>7</alarm> <prompt>Alarm Window</prompt> </data>