2014-11-22 11:32:12 +08:00
|
|
|
|
#include "elementhashtable.h"
|
2014-11-22 16:27:22 +08:00
|
|
|
|
#include <iostream>
|
2014-11-22 11:32:12 +08:00
|
|
|
|
ElementHashtable::ElementHashtable(QObject *parent) :
|
|
|
|
|
|
QObject(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ElementHashtable::child(QXmlStreamReader &reader)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QStringRef elementName;
|
|
|
|
|
|
elementName=reader.name();
|
|
|
|
|
|
BasicElementInfo *pointer=NULL;
|
2014-11-22 22:18:18 +08:00
|
|
|
|
if(elementName=="BusbarSection")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new BusbarSection;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="Terminal")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new Terminal;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="ACLineSegment")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new ACLineSegment;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="Breaker")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new Breaker;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="Compensator")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new Compensator;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="Disconnector")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new Disconnector;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="PowerTransformer")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new PowerTransformer;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(elementName=="SynchronousMachine")
|
|
|
|
|
|
{
|
|
|
|
|
|
pointer=new SynchronousMachine;
|
|
|
|
|
|
pointer->parse(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-11-22 11:32:12 +08:00
|
|
|
|
|
|
|
|
|
|
if(pointer)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->eleHT[elementName.toString()]=*pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ElementHashtable::parse(const QString& xmlPath)
|
|
|
|
|
|
{
|
|
|
|
|
|
QFile xmlFile(xmlPath);
|
|
|
|
|
|
|
|
|
|
|
|
int loop=0;
|
|
|
|
|
|
if(xmlFile.open(QFile::ReadOnly))
|
|
|
|
|
|
{
|
|
|
|
|
|
QXmlStreamReader reader(&xmlFile);
|
|
|
|
|
|
while(!reader.atEnd() && !reader.hasError())
|
|
|
|
|
|
{
|
|
|
|
|
|
reader.readNext();
|
|
|
|
|
|
if(reader.isStartElement())
|
|
|
|
|
|
{
|
|
|
|
|
|
if(reader.name()=="RDF")//不要读<rdf:RDF xmlns:rdf="http://www.w3.org/1999/ …… 这样一堆东西
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this->child(reader);//处理根元素下的第一级子元素,也就是Substation这一类。
|
|
|
|
|
|
}
|
|
|
|
|
|
loop++;
|
|
|
|
|
|
if(loop>20){
|
2014-11-22 16:27:22 +08:00
|
|
|
|
// break;
|
2014-11-22 11:32:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
if(reader.hasError())
|
|
|
|
|
|
{
|
|
|
|
|
|
qDebug()<<reader.errorString()<<"\n";
|
|
|
|
|
|
qDebug()<<"line number "<<reader.lineNumber()<<"\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
xmlFile.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|