使用QXMLStreamReader C ++,Qt读取XML文件,错误解析

时间:2015-11-24 13:11:19

标签: c++ xml qt

我有这样一个XML文件:

ingredients

我想将{brutto / netto / euro值读取到"<?xml version="1.0"?> <OrderDetails> <Companies number_of_companies="2" number_of_tasks="4"> <Company id="1"> <Tasks> <Task id="1" brutto="0.01" netto="0.00813008" euro="0.00192201"/> <Task id="2" brutto="0.02" netto="0.0162602" euro="0.00384401"/> <Task id="3" brutto="0.03" netto="0.0243902" euro="0.00576602"/> <Task id="4" brutto="0.04" netto="0.0325203" euro="0.00768802"/> </Tasks> </Company> <Company id="2"> <Tasks> <Task id="1" brutto="50" netto="40.6504" euro="9.61003"/> <Task id="2" brutto="60" netto="48.7805" euro="11.532"/> <Task id="3" brutto="70" netto="56.9106" euro="13.454"/> <Task id="4" brutto="80" netto="65.0407" euro="15.376"/> </Tasks> </Company> </Companies> </OrderDetails>" ,因此每个公司都有适当的向量自己的成本,我的意思是,我希望有类似的东西:

QVector<QVector<double> > brutto

我尝试使用此代码:

brutto[0] = [0.01, 0.02, 0.03, 0.04, 0.05]
brutto[1] = [50, 60, 70, 80]

但是当我尝试在我的代码中进一步使用这个向量向量时,我得到了错误QVector<QVector<double> > readBruttoCostsFromXML(QString xml) { QXmlStreamReader xmlReader(xml); int tasks = this->readNumOfTasksFromXML(xml); int companies = this->readNumOfCompaniesFromXML(xml); QVector<QVector<double> > bruttoCosts(companies); int i=0, j = 0; while(!xmlReader.atEnd() && !xmlReader.hasError()){ xmlReader.readNext(); if (xmlReader.name() == "Task" && xmlReader.isStartElement() && !xmlReader.isWhitespace()) { bruttoCosts[j].push_back(xmlReader.attributes().value("brutto").toDouble()); i ++; if(i == tasks-1) { i = 0; j++; } qDebug() << bruttoCosts[i] << "\n"; } } return bruttoCosts; } 。我的问题是如何正确阅读这样的XML文件?

1 个答案:

答案 0 :(得分:2)

我在QXMLStreamReader上遇到了类似的问题。

儿童标签发生的情况并不明显。我经历过QXMLStreamReader可能只是阅读它们,并且只能处理不那么复杂的XML结构。它专为XML STREAMS而设计,不是您拥有的,而是您所需要的。

要全面轻松地访问所有元素,您应该使用QDomDocument代替。