不是用QStringRef,太容易出错。

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-11-24 22:01:30 +08:00
parent 407fe62995
commit 8bb30a0940
24 changed files with 128 additions and 71 deletions

View File

@ -1,7 +1,7 @@
#include "BasicElementInfo.h"
//#include <iostream>
BasicElementInfo::BasicElementInfo()
#include <iostream>
BasicElementInfo::BasicElementInfo(QObject *parent)
{
}
@ -12,6 +12,16 @@ bool BasicElementInfo::derivedParse(QXmlStreamReader& reader)
return true;
}
QString BasicElementInfo::getID()
{
return this->id;
}
QString BasicElementInfo::getName()
{
return this->name;
}
bool BasicElementInfo::parse(QXmlStreamReader &reader)
{
return true;
@ -19,10 +29,11 @@ bool BasicElementInfo::parse(QXmlStreamReader &reader)
bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader)
{
// std::cout<<"father"<<"\n";
QStringRef elementName;
QStringRef id;
elementName=reader.name();
this->name=elementName.toString();
this->id=id.toString();
qDebug()<<reader.name()<<"\n";
if(reader.attributes().hasAttribute("rdf:ID"))
{
@ -33,14 +44,12 @@ bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader)
while(!reader.atEnd() && !reader.hasError())
{
reader.readNext();
elementName=reader.name();
this->derivedParse(reader);
if(reader.isEndElement() && reader.name()==elementName)
{
break;
}
}
this->name=elementName;
this->id=id;
return true;
}

View File

@ -2,19 +2,22 @@
#define BASICELEMENTINFO_H
#include <QString>
#include <QStringRef>
#include <QXmlStreamReader>
#include <QDebug>
#include <QObject>
class BasicElementInfo;
//typedef bool (BasicElementInfo::*derivedParseHandle)(QXmlStreamReader &reader);
class BasicElementInfo{
class BasicElementInfo:public QObject{
Q_OBJECT
public:
BasicElementInfo();
explicit BasicElementInfo(QObject *parent = 0);
virtual bool parse(QXmlStreamReader &reader);
QString getID();
QString getName();
protected:
bool parseBasicInfo(QXmlStreamReader &reader);
QStringRef name;
QStringRef id;
QString name;
QString id;
// derivedParseHandle derivedParse;
virtual bool derivedParse(QXmlStreamReader &reader);

View File

@ -1,6 +1,6 @@
#include "aclinesegment.h"
ACLineSegment::ACLineSegment():isTerminalA(true)
ACLineSegment::ACLineSegment(QObject *parent):BasicElementInfo(parent),isTerminalA(true)
{
}

View File

@ -4,7 +4,7 @@
class ACLineSegment:public BasicElementInfo
{
public:
ACLineSegment();
explicit ACLineSegment(QObject *parent = 0);
virtual bool parse(QXmlStreamReader &reader);
protected:
QStringRef terminalA;

View File

@ -1,6 +1,6 @@
#include "breaker.h"
Breaker::Breaker()
Breaker::Breaker(QObject *parent):BasicElementInfo(parent)
{
}
@ -10,7 +10,7 @@ bool Breaker::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
@ -18,14 +18,14 @@ bool Breaker::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->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
this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;

View File

@ -5,12 +5,12 @@
class Breaker:public BasicElementInfo
{
public:
Breaker();
explicit Breaker(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
QString terminalA;
QString terminalB;
QString equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;

View File

@ -1,6 +1,6 @@
#include "busbarsection.h"
BusbarSection::BusbarSection()
#include <iostream>
BusbarSection::BusbarSection(QObject *parent):BasicElementInfo(parent)
{
}
@ -11,7 +11,7 @@ bool BusbarSection::derivedParse(QXmlStreamReader& reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;
@ -19,5 +19,7 @@ bool BusbarSection::derivedParse(QXmlStreamReader& reader)
bool BusbarSection::parse(QXmlStreamReader& reader)
{
// std::cout<<"BusbarSection"<<std::endl;
return this->parseBasicInfo(reader);
}

View File

@ -5,10 +5,10 @@
class BusbarSection:public BasicElementInfo
{
public:
BusbarSection();
explicit BusbarSection(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminal;
QString terminal;
virtual bool derivedParse(QXmlStreamReader& reader);
};

View File

@ -1,6 +1,6 @@
#include "compensator.h"
Compensator::Compensator()
Compensator::Compensator(QObject *parent):BasicElementInfo(parent)
{
}
@ -11,7 +11,7 @@ bool Compensator::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;

View File

@ -5,12 +5,12 @@
class Compensator:public BasicElementInfo
{
public:
Compensator();
explicit Compensator(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
virtual bool derivedParse(QXmlStreamReader& reader);
private:
QStringRef terminal;
QString terminal;
};
#endif // COMPENSATOR_H

View File

@ -1,6 +1,6 @@
#include "disconnector.h"
Disconnector::Disconnector()
Disconnector::Disconnector(QObject *parent):BasicElementInfo(parent)
{
}
@ -11,7 +11,7 @@ bool Disconnector::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
@ -19,14 +19,14 @@ bool Disconnector::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->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
this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;

View File

@ -5,12 +5,12 @@
class Disconnector:public BasicElementInfo
{
public:
Disconnector();
explicit Disconnector(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
QString terminalA;
QString terminalB;
QString equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;

View File

@ -11,52 +11,88 @@ 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;
pointer=new BusbarSection(this);
pointer->parse(reader);
}
if(elementName=="Terminal")
{
pointer=new Terminal;
pointer=new Terminal(this);
pointer->parse(reader);
}
if(elementName=="ACLineSegment")
{
pointer=new ACLineSegment;
pointer=new ACLineSegment(this);
pointer->parse(reader);
}
if(elementName=="Breaker")
{
pointer=new Breaker;
pointer=new Breaker(this);
pointer->parse(reader);
}
if(elementName=="Compensator")
{
pointer=new Compensator;
pointer=new Compensator(this);
pointer->parse(reader);
}
if(elementName=="Disconnector")
{
pointer=new Disconnector;
pointer=new Disconnector(this);
pointer->parse(reader);
}
if(elementName=="PowerTransformer")
{
pointer=new PowerTransformer;
pointer=new PowerTransformer(this);
pointer->parse(reader);
}
if(elementName=="SynchronousMachine")
{
pointer=new SynchronousMachine;
pointer=new SynchronousMachine(this);
pointer->parse(reader);
}
if(pointer)
if(pointer && id!="")
{
this->eleHT[elementName.toString()]=*pointer;
if(this->eleHT.contains(id))
{
std::cout<<"contain"<<std::endl;
}
this->eleHT[id]=pointer;
// std::cout<<id.toStdString()<<std::endl;
// std::cout<<this->eleHT[id]->getName().toStdString()<<std::endl;
}
else
{
// std::cout<<elementName.toString().toStdString()<<std::endl;
}
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++)
{
// std::cout<<ite->toStdString()<<std::endl;
BasicElementInfo *p=ht[*ite];
// std::cout<<p->getName().toStdString()<<std::endl;
if(p->getName()=="BusbarSection")
{
std::cout<<"BusbarSection"<<"\n";
}
}
return true;
}
@ -78,15 +114,17 @@ bool ElementHashtable::parse(const QString& xmlPath)
{
continue;
}
this->child(reader);//处理根元素下的第一级子元素也就是Substation这一类。
}
loop++;
if(loop>20){
if(loop>600000){
// break;
}
}
// const QHash<QString,BasicElementInfo*> &ht=this->eleHT;
// std::cout<<ht["AC-1300969"]->getName().toString().toStdString()<<std::endl;
if(reader.hasError())
{
qDebug()<<reader.errorString()<<"\n";

View File

@ -23,9 +23,10 @@ class ElementHashtable : public QObject
public:
explicit ElementHashtable(QObject *parent = 0);
bool parse(const QString& xmlPath);
bool goPath();
private:
bool child(QXmlStreamReader &reader);
QHash<QString,BasicElementInfo> eleHT;
QHash<QString,BasicElementInfo *> eleHT;
signals:
public slots:

View File

@ -7,6 +7,8 @@ int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
ElementHashtable eleReader;
eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
// eleReader.parse("D:/Project/佛山项目/佛山收资/按元素分/BusbarSectionb.xml");
eleReader.goPath();
// RegexExtract regexExt;
// regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
// regexExt.exportBlocks("ThermalGeneratingUnit.xml");

View File

@ -13,4 +13,5 @@ INPUT(
./debug/powertransformer.o
./debug/synchronousmachine.o
./debug/moc_elementhashtable.o
./debug/moc_BasicElementInfo.o
);

View File

@ -13,4 +13,5 @@ INPUT(
./release/powertransformer.o
./release/synchronousmachine.o
./release/moc_elementhashtable.o
./release/moc_BasicElementInfo.o
);

View File

@ -1,6 +1,6 @@
#include "powertransformer.h"
PowerTransformer::PowerTransformer()
PowerTransformer::PowerTransformer(QObject *parent):BasicElementInfo(parent)
{
}
@ -11,7 +11,7 @@ bool PowerTransformer::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
@ -19,14 +19,14 @@ bool PowerTransformer::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->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
this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;

View File

@ -5,12 +5,12 @@
class PowerTransformer:public BasicElementInfo
{
public:
PowerTransformer();
explicit PowerTransformer(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
QString terminalA;
QString terminalB;
QString equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;

View File

@ -1,6 +1,6 @@
#include "synchronousmachine.h"
SynchronousMachine::SynchronousMachine()
SynchronousMachine::SynchronousMachine(QObject *parent):BasicElementInfo(parent)
{
}
@ -10,7 +10,7 @@ bool SynchronousMachine::derivedParse(QXmlStreamReader &reader)
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;

View File

@ -5,10 +5,10 @@
class SynchronousMachine:public BasicElementInfo
{
public:
SynchronousMachine();
explicit SynchronousMachine(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminal;
QString terminal;
virtual bool derivedParse(QXmlStreamReader& reader);
};

View File

@ -1,6 +1,6 @@
#include "terminal.h"
Terminal::Terminal()
Terminal::Terminal(QObject *parent):BasicElementInfo(parent)
{
}
@ -10,7 +10,7 @@ bool Terminal::derivedParse(QXmlStreamReader& reader)
{
QString cn;
cn=reader.attributes().value("rdf:resource").toString();
this->connectivityNode=cn.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->connectivityNode=cn.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Terminal.ConnectivityNode "<<this->connectivityNode<<"\n";
}
@ -18,7 +18,7 @@ bool Terminal::derivedParse(QXmlStreamReader& reader)
{
QString ce;
ce=reader.attributes().value("rdf:resource").toString();
this->conductingEquipment=ce.replace("#","").leftRef(-1);//返回整个字符串的Ref
this->conductingEquipment=ce.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Terminal.ConductingEquipment "<<this->conductingEquipment<<"\n";
}
return true;

View File

@ -5,12 +5,12 @@
class Terminal:public BasicElementInfo
{
public:
Terminal();
explicit Terminal(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader);
protected:
virtual bool derivedParse(QXmlStreamReader& reader);
QStringRef conductingEquipment;
QStringRef connectivityNode;
QString conductingEquipment;
QString connectivityNode;
};
#endif // TERMINAL_H

View File

@ -45,5 +45,5 @@ HEADERS += \
synchronousmachine.h
#release{
#DEFINES += QT_NO_DEBUG_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
#}