Skip to content

Instantly share code, notes, and snippets.

@lamprosg
Created March 20, 2012 10:11
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save lamprosg/2133804 to your computer and use it in GitHub Desktop.
Save lamprosg/2133804 to your computer and use it in GitHub Desktop.
Writing and reading XML files with Qt - qxmlstreamwriter and qxmlstreamreader provided classes
//Writing and reading XML files with Qt - qxmlstreamwriter and qxmlstreamreader supported classes
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")
{
READNEXT();
}
else if(Rxml.name() == "LIGHT1")
{
while(!Rxml.atEnd())
{
if(Rxml.isEndElement())
{
READNEXT();
break;
}
else if(Rxml.isCharacters())
{
READNEXT();
}
else if(Rxml.isStartElement())
{
if(Rxml.name() == "State")
{
ReadStateElement();
}
else if(Rxml.name() == "Room")
{
ReadRoomElement();
}
else if(Rxml.name() == "Potencial")
{
ReadPotencialElement();
}
READNEXT();
}
else
{
READNEXT();
}
}
}
}
else
{
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())
{
READNEXT();
break;
}
else if(Rxml.isStartElement())
{
QString roomelement = Rxml.readElementText(); //Get the xml value
READNEXT();
break;
}
else if(Rxml.isCharacters())
{
READNEXT();
}
else
{
READNEXT();
}
}
}
<?xml version="1.0"?>
<LAMPS>
<LIGHT1>
<State>statevalue</State>
<Room>roomvalue</Room>
<Potencial>potencialvalue</Potencial>
</LIGHT1>
</LAMPS>
@KvanTTT
Copy link

KvanTTT commented Nov 13, 2014

What is READNEXT?

@CMLDMR
Copy link

CMLDMR commented Mar 20, 2015

Rxml.readNext(); = READNEXT

@zabdielfer
Copy link

what that fuck

@AdrianCURTY
Copy link

Thanks !

@Samad08
Copy link

Samad08 commented Jul 15, 2020

what is the correct way to write these ?
ReadStateElement()
ReadRoomElement()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment