Проверка на исключение в XML

У меня есть XML-файл, который выглядит так:

<ServiceExceptionReport>
    <ServiceException>abc</ServiceException>
    <ServiceException>def</ServiceException>
</ServiceExceptionReport>

И я создал такой код:

QDomDocument doc;
doc.setContent(data); // data is QByteArray that contains XML    
QDomNodeList report = doc.elementsByTagName("ServiceExceptionReport");
QDomNodeList exceptions = doc.elementsByTagName("ServiceException");

if (report.isEmpty()){
    ui->textEdit->insertHtml("<font color=\"green\">No exceptions found</font><br>");

} else {
    ui->textEdit->insertHtml("<font color=\"orange\">Found ServiceExceptionReport. Reading ServiceExceptions...</font><br>");
    qDebug() << exceptions.size(); //Program shows 2 here
    for (int i = 0; i < exceptions.size(); i++) {
        QDomNode n = report.item(i);
        QDomElement exception = n.firstChildElement("ServiceException");
        QString number =  QString::number(i);
        QString exceptiontxt = exception.text();
        ui->textEdit->insertHtml("<font color=\"red\">Error no. " + number + "&#58;" + exceptiontxt + "</font><br>"); 
    }
}

Программа пишет это в текстовом редакторе:

Found ServiceExceptionReport. Reading ServiceExceptions...
Error no. 1 abc
Error no. 2          <-- This is my problem. There should be 'def'

Зачем def не отображается в textEdit? Как я могу это исправить?

Кстати. Извините за мой английский

1 ответ

Решение

Вы не соответствовали тому, как вы получаете QDomElement для ServiceException XML-узел.

Следующие строки вашего кода:

QDomNode n = report.item(i);
QDomElement exception = n.firstChildElement("ServiceException");

Должен быть заменен чем-то вроде этого:

QDomNode n = exceptions.item(i);
QDomElement exception = n.toElement();

В вашем коде вы пытаетесь перебрать QDomNodeList exceptions список, но в цикле вы называете report.item(i) вместо exceptions.item(i);

Другие вопросы по тегам