Czytanie pliku XML do wektora, błędy

0

Mam taki plik XML:

"<?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>"

Chciałbym go wczytać do wektora wektorów, w taki sposób, że jeśli brutto to QVector<QVector<double> >, będę po wczytaniu miał:

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

Napisałem sobie taką metodę:

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;
}

Jednak program mi się wywala (piszę na Windowsie, tymczasowo), i nie mogę nawet zobaczyć, co jest w wektorze, a coś na pewno jest źle wczytane, bo dostaję błąd: ASSERT failure in QVector<T>::operator[]: "index out of range". Może ktoś z Was pomóc? Bo patrzę na to i nie widzę ...

0

a debuggowales?

ten if jest strasznie dziwny. Zapewne robisz o jedno za duzo j++

0

qDebug() << bruttoCosts[i] << "\n";
i możesz mieć w przykładzie z zakresu [0,3], a wektor masz dwuelementowy.

0

Chyba ogarnąłem:

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)
            {
                i = 0;
                j++;
            }
        }
    }

    return bruttoCosts;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.