diff --git a/testHasttable/BasicElementInfo.cpp b/testHasttable/BasicElementInfo.cpp index b676896..cd45149 100644 --- a/testHasttable/BasicElementInfo.cpp +++ b/testHasttable/BasicElementInfo.cpp @@ -1,10 +1,25 @@ #include "BasicElementInfo.h" //#include +BasicElementInfo::BasicElementInfo() +{ + +} + + +bool BasicElementInfo::derivedParse(QXmlStreamReader& reader) +{ + return true; +} + +bool BasicElementInfo::parse(QXmlStreamReader &reader) +{ + return true; +} bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader) { -// std::cout<<"father"<<"\n"; + // std::cout<<"father"<<"\n"; QStringRef elementName; QStringRef id; elementName=reader.name(); @@ -14,14 +29,17 @@ bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader) qDebug()<derivedParse(reader); if(reader.isEndElement() && reader.name()==elementName) { break; } } + this->name=elementName; this->id=id; return true; diff --git a/testHasttable/BasicElementInfo.h b/testHasttable/BasicElementInfo.h index 77c83ec..04f1ffb 100644 --- a/testHasttable/BasicElementInfo.h +++ b/testHasttable/BasicElementInfo.h @@ -5,13 +5,21 @@ #include #include #include +class BasicElementInfo; +//typedef bool (BasicElementInfo::*derivedParseHandle)(QXmlStreamReader &reader); class BasicElementInfo{ +public: + BasicElementInfo(); + virtual bool parse(QXmlStreamReader &reader); protected: bool parseBasicInfo(QXmlStreamReader &reader); QStringRef name; QStringRef id; - QString nextLinkString; - QString prevousLinkString; +// derivedParseHandle derivedParse; + virtual bool derivedParse(QXmlStreamReader &reader); + +// QString nextLinkString; +// QString prevousLinkString; }; diff --git a/testHasttable/aclinesegment.cpp b/testHasttable/aclinesegment.cpp new file mode 100644 index 0000000..d8d9159 --- /dev/null +++ b/testHasttable/aclinesegment.cpp @@ -0,0 +1,38 @@ +#include "aclinesegment.h" + +ACLineSegment::ACLineSegment():isTerminalA(true) +{ +} + +bool ACLineSegment::derivedParse(QXmlStreamReader &reader) +{ + if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; + this->isTerminalA=false; + } + if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; + } + if("ConductingEquipment.Substation"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString ss; + ss=reader.attributes().value("rdf:resource").toString(); + this->containsOfSubstation=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Substation "<containsOfSubstation<<"\n"; + } + return true; +} + +bool ACLineSegment::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} + diff --git a/testHasttable/aclinesegment.h b/testHasttable/aclinesegment.h new file mode 100644 index 0000000..1e8438a --- /dev/null +++ b/testHasttable/aclinesegment.h @@ -0,0 +1,18 @@ +#ifndef ACLINESEGMENT_H +#define ACLINESEGMENT_H +#include "BasicElementInfo.h" +class ACLineSegment:public BasicElementInfo +{ +public: + ACLineSegment(); + virtual bool parse(QXmlStreamReader &reader); +protected: + QStringRef terminalA; + QStringRef terminalB; + QStringRef containsOfSubstation; + virtual bool derivedParse(QXmlStreamReader &reader); +private: + bool isTerminalA; +}; + +#endif // ACLINESEGMENT_H diff --git a/testHasttable/breaker.cpp b/testHasttable/breaker.cpp new file mode 100644 index 0000000..d5f0735 --- /dev/null +++ b/testHasttable/breaker.cpp @@ -0,0 +1,37 @@ +#include "breaker.h" + +Breaker::Breaker() +{ +} + +bool Breaker::derivedParse(QXmlStreamReader &reader) +{ + if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; + this->isTerminalA=false; + } + if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; + } + if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString ss; + ss=reader.attributes().value("rdf:resource").toString(); + this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; + } + return true; +} + +bool Breaker::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/breaker.h b/testHasttable/breaker.h new file mode 100644 index 0000000..671c034 --- /dev/null +++ b/testHasttable/breaker.h @@ -0,0 +1,19 @@ +#ifndef BREAKER_H +#define BREAKER_H +#include +#include "BasicElementInfo.h" +class Breaker:public BasicElementInfo +{ +public: + Breaker(); + virtual bool parse(QXmlStreamReader& reader); +protected: + QStringRef terminalA; + QStringRef terminalB; + QStringRef equipmentContainer; + virtual bool derivedParse(QXmlStreamReader& reader); +private: + bool isTerminalA; +}; + +#endif // BREAKER_H diff --git a/testHasttable/busbarsection.cpp b/testHasttable/busbarsection.cpp new file mode 100644 index 0000000..c597396 --- /dev/null +++ b/testHasttable/busbarsection.cpp @@ -0,0 +1,23 @@ +#include "busbarsection.h" + +BusbarSection::BusbarSection() +{ +} + + +bool BusbarSection::derivedParse(QXmlStreamReader& reader) +{ + if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; + } + return true; +} + +bool BusbarSection::parse(QXmlStreamReader& reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/busbarsection.h b/testHasttable/busbarsection.h new file mode 100644 index 0000000..c72b2ae --- /dev/null +++ b/testHasttable/busbarsection.h @@ -0,0 +1,15 @@ +#ifndef BUSBARSECTION_H +#define BUSBARSECTION_H +#include +#include "BasicElementInfo.h" +class BusbarSection:public BasicElementInfo +{ +public: + BusbarSection(); + virtual bool parse(QXmlStreamReader& reader); +protected: + QStringRef terminal; + virtual bool derivedParse(QXmlStreamReader& reader); +}; + +#endif // BUSBARSECTION_H diff --git a/testHasttable/compensator.cpp b/testHasttable/compensator.cpp new file mode 100644 index 0000000..baaab28 --- /dev/null +++ b/testHasttable/compensator.cpp @@ -0,0 +1,23 @@ +#include "compensator.h" + +Compensator::Compensator() +{ +} + + +bool Compensator::derivedParse(QXmlStreamReader &reader) +{ + if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; + } + return true; +} + +bool Compensator::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/compensator.h b/testHasttable/compensator.h new file mode 100644 index 0000000..1a18b3a --- /dev/null +++ b/testHasttable/compensator.h @@ -0,0 +1,16 @@ +#ifndef COMPENSATOR_H +#define COMPENSATOR_H +#include +#include "BasicElementInfo.h" +class Compensator:public BasicElementInfo +{ +public: + Compensator(); + virtual bool parse(QXmlStreamReader& reader); +protected: + virtual bool derivedParse(QXmlStreamReader& reader); +private: + QStringRef terminal; +}; + +#endif // COMPENSATOR_H diff --git a/testHasttable/disconnector.cpp b/testHasttable/disconnector.cpp new file mode 100644 index 0000000..a874180 --- /dev/null +++ b/testHasttable/disconnector.cpp @@ -0,0 +1,38 @@ +#include "disconnector.h" + +Disconnector::Disconnector() +{ +} + + +bool Disconnector::derivedParse(QXmlStreamReader &reader) +{ + if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; + this->isTerminalA=false; + } + if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; + } + if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString ss; + ss=reader.attributes().value("rdf:resource").toString(); + this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; + } + return true; +} + +bool Disconnector::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/disconnector.h b/testHasttable/disconnector.h new file mode 100644 index 0000000..96e7aff --- /dev/null +++ b/testHasttable/disconnector.h @@ -0,0 +1,19 @@ +#ifndef DISCONNECTOR_H +#define DISCONNECTOR_H +#include "BasicElementInfo.h" +#include +class Disconnector:public BasicElementInfo +{ +public: + Disconnector(); + virtual bool parse(QXmlStreamReader& reader); +protected: + QStringRef terminalA; + QStringRef terminalB; + QStringRef equipmentContainer; + virtual bool derivedParse(QXmlStreamReader& reader); +private: + bool isTerminalA; +}; + +#endif // DISCONNECTOR_H diff --git a/testHasttable/elementhashtable.cpp b/testHasttable/elementhashtable.cpp index ddcf7f0..5b8aae2 100644 --- a/testHasttable/elementhashtable.cpp +++ b/testHasttable/elementhashtable.cpp @@ -12,12 +12,47 @@ bool ElementHashtable::child(QXmlStreamReader &reader) QStringRef elementName; elementName=reader.name(); BasicElementInfo *pointer=NULL; -// if(elementName.toString()=="SubControlArea") -// { -// SubControlArea sa; -// pointer=&sa; -// sa.parse(reader); -// } + 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); + } + if(pointer) { @@ -45,7 +80,6 @@ bool ElementHashtable::parse(const QString& xmlPath) } this->child(reader);//处理根元素下的第一级子元素,也就是Substation这一类。 - } loop++; if(loop>20){ diff --git a/testHasttable/elementhashtable.h b/testHasttable/elementhashtable.h index 2d23cfb..8da9459 100644 --- a/testHasttable/elementhashtable.h +++ b/testHasttable/elementhashtable.h @@ -9,6 +9,14 @@ #include #include "BasicElementInfo.h" #include "subcontrolarea.h" +#include "busbarsection.h" +#include "terminal.h" +#include "aclinesegment.h" +#include "breaker.h" +#include "compensator.h" +#include "disconnector.h" +#include "powertransformer.h" +#include "synchronousmachine.h" class ElementHashtable : public QObject { Q_OBJECT diff --git a/testHasttable/main.cpp b/testHasttable/main.cpp index 50d0f9f..03e465b 100644 --- a/testHasttable/main.cpp +++ b/testHasttable/main.cpp @@ -6,10 +6,10 @@ int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); ElementHashtable eleReader; -// eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); - RegexExtract regexExt; - regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); - regexExt.exportBlocks("ConnectivityNode.xml"); + eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); +// RegexExtract regexExt; +// regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); +// regexExt.exportBlocks("ThermalGeneratingUnit.xml"); std::cout<<"Finished."<isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; + this->isTerminalA=false; + } + if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; + } + if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString ss; + ss=reader.attributes().value("rdf:resource").toString(); + this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; + } + return true; +} + +bool PowerTransformer::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/powertransformer.h b/testHasttable/powertransformer.h new file mode 100644 index 0000000..a180101 --- /dev/null +++ b/testHasttable/powertransformer.h @@ -0,0 +1,19 @@ +#ifndef POWERTRANSFORMER_H +#define POWERTRANSFORMER_H +#include "BasicElementInfo.h" +#include +class PowerTransformer:public BasicElementInfo +{ +public: + PowerTransformer(); + virtual bool parse(QXmlStreamReader& reader); +protected: + QStringRef terminalA; + QStringRef terminalB; + QStringRef equipmentContainer; + virtual bool derivedParse(QXmlStreamReader& reader); +private: + bool isTerminalA; +}; + +#endif // POWERTRANSFORMER_H diff --git a/testHasttable/regexextract.cpp b/testHasttable/regexextract.cpp index b0b4347..132184d 100644 --- a/testHasttable/regexextract.cpp +++ b/testHasttable/regexextract.cpp @@ -36,14 +36,20 @@ bool RegexExtract::extract(const QString& xmlPath) QString line; QString block; bool isInner=false; + int lineNum=0; if(file.open(QFile::ReadOnly)) { QTextStream reader(&file); while(!reader.atEnd()) { line=reader.readLine(); + lineNum++; + if(lineNum%100000==0) + { + std::cout<startsWith(line,"ConnectivityNode")) + if(!isInner && this->startsWith(line,"ThermalGeneratingUnit")) { block=""; isInner=true; @@ -52,7 +58,7 @@ bool RegexExtract::extract(const QString& xmlPath) { block=block+line+QString("\n"); } - if(isInner && this->endsWith(line,"ConnectivityNode")) + if(isInner && this->endsWith(line,"ThermalGeneratingUnit")) { isInner=false; this->blocks.push_back(block); diff --git a/testHasttable/synchronousmachine.cpp b/testHasttable/synchronousmachine.cpp new file mode 100644 index 0000000..0f2febb --- /dev/null +++ b/testHasttable/synchronousmachine.cpp @@ -0,0 +1,22 @@ +#include "synchronousmachine.h" + +SynchronousMachine::SynchronousMachine() +{ +} + +bool SynchronousMachine::derivedParse(QXmlStreamReader &reader) +{ + if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString terminal; + terminal=reader.attributes().value("rdf:resource").toString(); + this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; + } + return true; +} + +bool SynchronousMachine::parse(QXmlStreamReader &reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/synchronousmachine.h b/testHasttable/synchronousmachine.h new file mode 100644 index 0000000..09229c5 --- /dev/null +++ b/testHasttable/synchronousmachine.h @@ -0,0 +1,15 @@ +#ifndef SYNCHRONOUSMACHINE_H +#define SYNCHRONOUSMACHINE_H +#include +#include "BasicElementInfo.h" +class SynchronousMachine:public BasicElementInfo +{ +public: + SynchronousMachine(); + virtual bool parse(QXmlStreamReader& reader); +protected: + QStringRef terminal; + virtual bool derivedParse(QXmlStreamReader& reader); +}; + +#endif // SYNCHRONOUSMACHINE_H diff --git a/testHasttable/terminal.cpp b/testHasttable/terminal.cpp new file mode 100644 index 0000000..68a5e07 --- /dev/null +++ b/testHasttable/terminal.cpp @@ -0,0 +1,30 @@ +#include "terminal.h" + +Terminal::Terminal() +{ +} + +bool Terminal::derivedParse(QXmlStreamReader& reader) +{ + if("Terminal.ConnectivityNode"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString cn; + cn=reader.attributes().value("rdf:resource").toString(); + this->connectivityNode=cn.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"Terminal.ConnectivityNode "<connectivityNode<<"\n"; + } + + if("Terminal.ConductingEquipment"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) + { + QString ce; + ce=reader.attributes().value("rdf:resource").toString(); + this->conductingEquipment=ce.replace("#","").leftRef(-1);//返回整个字符串的Ref + qDebug()<<"got "<<"Terminal.ConductingEquipment "<conductingEquipment<<"\n"; + } + return true; +} + +bool Terminal::parse(QXmlStreamReader& reader) +{ + return this->parseBasicInfo(reader); +} diff --git a/testHasttable/terminal.h b/testHasttable/terminal.h new file mode 100644 index 0000000..1308a9a --- /dev/null +++ b/testHasttable/terminal.h @@ -0,0 +1,16 @@ +#ifndef TERMINAL_H +#define TERMINAL_H +#include +#include "BasicElementInfo.h" +class Terminal:public BasicElementInfo +{ +public: + Terminal(); + virtual bool parse(QXmlStreamReader& reader); +protected: + virtual bool derivedParse(QXmlStreamReader& reader); + QStringRef conductingEquipment; + QStringRef connectivityNode; +}; + +#endif // TERMINAL_H diff --git a/testHasttable/testHasttable.pro b/testHasttable/testHasttable.pro index 3a17451..c003937 100644 --- a/testHasttable/testHasttable.pro +++ b/testHasttable/testHasttable.pro @@ -20,13 +20,29 @@ SOURCES += main.cpp \ elementhashtable.cpp \ subcontrolarea.cpp \ BasicElementInfo.cpp \ - regexextract.cpp + regexextract.cpp \ + busbarsection.cpp \ + terminal.cpp \ + aclinesegment.cpp \ + breaker.cpp \ + compensator.cpp \ + disconnector.cpp \ + powertransformer.cpp \ + synchronousmachine.cpp HEADERS += \ elementhashtable.h \ BasicElementInfo.h \ subcontrolarea.h \ - regexextract.h + regexextract.h \ + busbarsection.h \ + terminal.h \ + aclinesegment.h \ + breaker.h \ + compensator.h \ + disconnector.h \ + powertransformer.h \ + synchronousmachine.h #release{ #DEFINES += QT_NO_DEBUG_OUTPUT