不是用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

@@ -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";