#include "elementhashtable.h" #include ElementHashtable::ElementHashtable(QObject *parent) : QObject(parent),currentHT(NULL) { } 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!="") { QHash *hash=this->currentHT; (*hash)[id]=pointer; } return true; } bool ElementHashtable::GoPath() { const QHash &zwht=this->eleHT;//从配网开始找 QList keys; keys=zwht.keys(); std::cout<::Iterator ite=keys.begin(); ite!=keys.end(); ite++) { BasicElementInfo *p=zwht[*ite]; // if(p->getName()=="ACLineSegment"){ // std::cout<getID().toStdString()<getName()=="ACLineSegment" && p->getID()=="AC-456702") { ACLineSegment *ac=static_cast(p);//BusbarSection也就是线路头节点 QString acTerminal=ac->getTerminalB(); //找Terminal的东西 Terminal *acTerminalP=static_cast(zwht[acTerminal]); std::cout<getID().toStdString()<getConnectivityNode(); if(node=="") { continue;//有些Terminal是没有Node的 } std::cout<eleHT); tpRecorder.startWithNode(node); } } 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")//不要读 *t) { this->currentHT=t; return true; } bool ElementHashtable::Parse(const QString& xmlPWPath,const QString& xmlZWPath){ this->setCurrentHashTable(&this->eleHT); this->parse(xmlPWPath); // this->setCurrentHashTable(&this->mainStationHT); // this->parse(xmlZWPath); return true; }