1818
1919#include < QFile>
2020#include < QXmlStreamWriter>
21+ #include < qdebug>
2122#include " xmlreport.h"
2223
24+ static const char ResultElementName[] = " results" ;
25+ static const char ErrorElementName[] = " error" ;
26+ static const char FilenameAttribute[] = " file" ;
27+ static const char LineAttribute[] = " line" ;
28+ static const char IdAttribute[] = " id" ;
29+ static const char SeverityAttribute[] = " severity" ;
30+ static const char MsgAttribute[] = " msg" ;
31+
2332XmlReport::XmlReport (const QString &filename, QObject * parent) :
2433 Report(filename, parent),
34+ mXmlReader(NULL ),
2535 mXmlWriter(NULL )
2636{
2737}
2838
2939XmlReport::~XmlReport ()
3040{
41+ delete mXmlReader ;
3142 delete mXmlWriter ;
3243 Close ();
3344}
@@ -43,11 +54,22 @@ bool XmlReport::Create()
4354 return success;
4455}
4556
57+ bool XmlReport::Open ()
58+ {
59+ bool success = false ;
60+ if (Report::Open ())
61+ {
62+ mXmlReader = new QXmlStreamReader (Report::GetFile ());
63+ success = true ;
64+ }
65+ return success;
66+ }
67+
4668void XmlReport::WriteHeader ()
4769{
4870 mXmlWriter ->setAutoFormatting (true );
4971 mXmlWriter ->writeStartDocument ();
50- mXmlWriter ->writeStartElement (" results " );
72+ mXmlWriter ->writeStartElement (ResultElementName );
5173}
5274
5375void XmlReport::WriteFooter ()
@@ -65,11 +87,66 @@ void XmlReport::WriteError(const QStringList &files, const QStringList &lines,
6587 The callstack seems to be ignored here aswell, instead last item of the stack is used
6688 */
6789
68- mXmlWriter ->writeStartElement (" error " );
69- mXmlWriter ->writeAttribute (" file " , files[files.size () - 1 ]);
70- mXmlWriter ->writeAttribute (" line " , lines[lines.size () - 1 ]);
71- mXmlWriter ->writeAttribute (" id " , id);
72- mXmlWriter ->writeAttribute (" severity " , severity);
73- mXmlWriter ->writeAttribute (" msg " , msg);
90+ mXmlWriter ->writeStartElement (ErrorElementName );
91+ mXmlWriter ->writeAttribute (FilenameAttribute , files[files.size () - 1 ]);
92+ mXmlWriter ->writeAttribute (LineAttribute , lines[lines.size () - 1 ]);
93+ mXmlWriter ->writeAttribute (IdAttribute , id);
94+ mXmlWriter ->writeAttribute (SeverityAttribute , severity);
95+ mXmlWriter ->writeAttribute (MsgAttribute , msg);
7496 mXmlWriter ->writeEndElement ();
7597}
98+
99+ void XmlReport::Read ()
100+ {
101+ bool insideResults = false ;
102+ if (!mXmlReader )
103+ {
104+ qDebug () << " You must Open() the file before reading it!" ;
105+ return ;
106+ }
107+ while (!mXmlReader ->atEnd ())
108+ {
109+ switch (mXmlReader ->readNext ())
110+ {
111+ case QXmlStreamReader::StartElement:
112+ if (mXmlReader ->name () == ResultElementName)
113+ insideResults = true ;
114+
115+ // Read error element from inside result element
116+ if (insideResults && mXmlReader ->name () == ErrorElementName)
117+ ReadError (mXmlReader );
118+ break ;
119+
120+ case QXmlStreamReader::EndElement:
121+ if (mXmlReader ->name () == ResultElementName)
122+ insideResults = false ;
123+ break ;
124+
125+ // Not handled
126+ case QXmlStreamReader::NoToken:
127+ case QXmlStreamReader::Invalid:
128+ case QXmlStreamReader::StartDocument:
129+ case QXmlStreamReader::EndDocument:
130+ case QXmlStreamReader::Characters:
131+ case QXmlStreamReader::Comment:
132+ case QXmlStreamReader::DTD:
133+ case QXmlStreamReader::EntityReference:
134+ case QXmlStreamReader::ProcessingInstruction:
135+ break ;
136+ }
137+ }
138+ }
139+
140+ void XmlReport::ReadError (QXmlStreamReader *reader)
141+ {
142+ if (reader->name ().toString () == ErrorElementName)
143+ {
144+ QXmlStreamAttributes attribs = reader->attributes ();
145+ QString filename = attribs.value (" " , FilenameAttribute).toString ();
146+ QString line = attribs.value (" " , LineAttribute).toString ();
147+ QString id = attribs.value (" " , IdAttribute).toString ();
148+ QString severity = attribs.value (" " , SeverityAttribute).toString ();
149+ QString msg = attribs.value (" " , MsgAttribute).toString ();
150+ qDebug () << " Error: " << filename << " " << line << " " << id << " " << severity << " " << msg;
151+ }
152+ }
0 commit comments