cimforreduceloss/testHasttable/elementhashtable.cpp

121 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "elementhashtable.h"
#include <iostream>
ElementHashtable::ElementHashtable(QObject *parent) :
QObject(parent)
{
}
bool ElementHashtable::child(QXmlStreamReader &reader)
{
QStringRef elementName;
elementName=reader.name();
QString id;
if(reader.attributes().hasAttribute("rdf:ID"))
{
id=reader.attributes().value("rdf:ID").toString();
}
BasicElementInfo *pointer=NULL;
if(elementName=="BusbarSection")
{
pointer=new BusbarSection(this);
pointer->parse(reader);
}
if(elementName=="Terminal")
{
pointer=new Terminal(this);
pointer->parse(reader);
}
if(elementName=="ACLineSegment")
{
pointer=new ACLineSegment(this);
pointer->parse(reader);
}
if(elementName=="Breaker")
{
pointer=new Breaker(this);
pointer->parse(reader);
}
if(elementName=="Compensator")
{
pointer=new Compensator(this);
pointer->parse(reader);
}
if(elementName=="Disconnector")
{
pointer=new Disconnector(this);
pointer->parse(reader);
}
if(elementName=="PowerTransformer")
{
pointer=new PowerTransformer(this);
pointer->parse(reader);
}
if(elementName=="SynchronousMachine")
{
pointer=new SynchronousMachine(this);
pointer->parse(reader);
}
if(pointer && id!="")
{
this->eleHT[id]=pointer;
}
return true;
}
bool ElementHashtable::goPath()
{
const QHash<QString,BasicElementInfo*> &ht=this->eleHT;
QList<QString> keys;
keys=ht.keys();
std::cout<<keys.length()<<std::endl;
for(QList<QString>::Iterator ite=keys.begin();
ite!=keys.end();
ite++)
{
BasicElementInfo *p=ht[*ite];
if(p->getName()=="BusbarSection")
{
std::cout<<"BusbarSection"<<"\n";
}
}
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>600000){
// break;
}
}
if(reader.hasError())
{
qDebug()<<reader.errorString()<<"\n";
qDebug()<<"line number "<<reader.lineNumber()<<"\n";
}
xmlFile.close();
}
return true;
}