我有这样一个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文件?
答案 0 :(得分:2)
我在QXMLStreamReader上遇到了类似的问题。
儿童标签发生的情况并不明显。我经历过QXMLStreamReader
可能只是阅读它们,并且只能处理不那么复杂的XML结构。它专为XML STREAMS而设计,不是您拥有的,而是您所需要的。
要全面轻松地访问所有元素,您应该使用QDomDocument
代替。