Hi,
I create new C++ class:
myxmlclass.h:
#ifndef MYXMLCLASS_H
#define MYXMLCLASS_H
class MyXMLClass
{
public:
MyXMLClass();
public slots:
void SaveXMLFile();
void ReadXMLFile();
};
#endif // MYXMLCLASS_H
#ifndef MYXMLCLASS_H
#define MYXMLCLASS_H
class MyXMLClass
{
public:
MyXMLClass();
public slots:
void SaveXMLFile();
void ReadXMLFile();
};
#endif // MYXMLCLASS_H
To copy to clipboard, switch view to plain text mode
myxmlclass.cpp:
#include <myxmlclass.h>
#include <QFileDialog>
#include <QXmlStreamWriter>
void MyXMLClass::SaveXMLFile()
{
tr("Save Xml"), ".",
tr("Xml files (*.xml)"));
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("LAMPS");
xmlWriter.writeStartElement("LIGHT1");
xmlWriter.writeTextElement("State", "statevalue" );
xmlWriter.writeTextElement("Room", "roomvalue");
xmlWriter.writeTextElement("Potencial", "potencialvalue");
xmlWriter.writeEndElement();
file.close();
}
void MyXMLClass::ReadXMLFile()
{
QXmlStreamReader Rxml;
tr("Open Xml"), ".",
tr("Xml files (*.xml)"));
{
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;
}
Rxml.setDevice(&file);
Rxml.readNext();
while (!Rxml.atEnd())
{
if (Rxml.isStartElement())
{
if (Rxml.name() == "LAMPS")
{
Rxml.readNext();
}
else if (Rxml.name() == "LIGHT1")
{
while (!Rxml.atEnd())
{
if (Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if (Rxml.isCharacters())
{
Rxml.readNext();
}
else if (Rxml.isStartElement())
{
if (Rxml.name() == "State")
{
ReadStateElement();
}
else if (Rxml.name() == "Room")
{
ReadRoomElement();
}
else if (Rxml.name() == "Potencial")
{
ReadPotencialElement();
}
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}
}
}
else
{
Rxml.readNext();
}
file.close();
if (Rxml.hasError())
{
std::cerr << "Error: Failed to parse file "
<< qPrintable(filename) << ": "
<< qPrintable(Rxml.errorString()) << std::endl;
}
else if (file.
error() != QFile::NoError) {
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;
}
}
}
//Example for Room Element
void MyXMLClass::ReadRoomElement()
{
while(!Rxml.atEnd())
{
if(Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if(Rxml.isStartElement())
{
QString roomelement
= Rxml.
readElementText();
//Get the xml value Rxml.readNext();
break;
}
else if(Rxml.isCharacters())
{
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}
}
#include <myxmlclass.h>
#include <QFileDialog>
#include <QXmlStreamWriter>
void MyXMLClass::SaveXMLFile()
{
QString filename = QFileDialog::getSaveFileName(this,
tr("Save Xml"), ".",
tr("Xml files (*.xml)"));
QFile file(filename);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("LAMPS");
xmlWriter.writeStartElement("LIGHT1");
xmlWriter.writeTextElement("State", "statevalue" );
xmlWriter.writeTextElement("Room", "roomvalue");
xmlWriter.writeTextElement("Potencial", "potencialvalue");
xmlWriter.writeEndElement();
file.close();
}
void MyXMLClass::ReadXMLFile()
{
QXmlStreamReader Rxml;
QString filename = QFileDialog::getOpenFileName(this,
tr("Open Xml"), ".",
tr("Xml files (*.xml)"));
QFile file(filename);
if (!file.open(QFile::ReadOnly | QFile::Text))
{
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;
}
Rxml.setDevice(&file);
Rxml.readNext();
while (!Rxml.atEnd())
{
if (Rxml.isStartElement())
{
if (Rxml.name() == "LAMPS")
{
Rxml.readNext();
}
else if (Rxml.name() == "LIGHT1")
{
while (!Rxml.atEnd())
{
if (Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if (Rxml.isCharacters())
{
Rxml.readNext();
}
else if (Rxml.isStartElement())
{
if (Rxml.name() == "State")
{
ReadStateElement();
}
else if (Rxml.name() == "Room")
{
ReadRoomElement();
}
else if (Rxml.name() == "Potencial")
{
ReadPotencialElement();
}
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}
}
}
else
{
Rxml.readNext();
}
file.close();
if (Rxml.hasError())
{
std::cerr << "Error: Failed to parse file "
<< qPrintable(filename) << ": "
<< qPrintable(Rxml.errorString()) << std::endl;
}
else if (file.error() != QFile::NoError)
{
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;
}
}
}
//Example for Room Element
void MyXMLClass::ReadRoomElement()
{
while(!Rxml.atEnd())
{
if(Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if(Rxml.isStartElement())
{
QString roomelement = Rxml.readElementText(); //Get the xml value
Rxml.readNext();
break;
}
else if(Rxml.isCharacters())
{
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}
}
To copy to clipboard, switch view to plain text mode
I have syntax error : missing ':' before identifier 'slots'.
Bookmarks