#include "elementhashtable.h" #include 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 &ht=this->eleHT; QList keys; keys=ht.keys(); std::cout<::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")//不要读