检查XML中的异常

检查XML中的异常,xml,qt,qdomdocument,Xml,Qt,Qdomdocument,我有一个如下所示的XML文件: <ServiceExceptionReport> <ServiceException>abc</ServiceException> <ServiceException>def</ServiceException> </ServiceExceptionReport> QDomDocument doc; doc.setContent(data); // data is QByte

我有一个如下所示的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>"); 
    }
}
QDomNode n = exceptions.item(i);
QDomElement exception = n.toElement();

abc
def
我创建了如下代码:

<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>"); 
    }
}
QDomNode n = exceptions.item(i);
QDomElement exception = n.toElement();
qdomdock;
文件设置内容(数据);//数据是包含XML的QByteArray
QDomNodeList报告=doc.elementsByTagName(“ServiceExceptionReport”);
QDomNodeList exceptions=doc.elementsByTagName(“ServiceException”);
if(report.isEmpty()){
ui->textEdit->insertHtml(“未发现异常
”; }否则{ ui->textEdit->insertHtml(“找到ServiceExceptionReport.Reading ServiceExceptions…
”; qDebug()text编辑->插入TML(“错误号“+number+”:;“+exceptiontxt+”
”; } }
程序将其写入文本编辑:

Found ServiceExceptionReport. Reading ServiceExceptions...
Error no. 1 abc
Error no. 2          <-- This is my problem. There should be 'def'
找到ServiceExceptionReport。正在读取服务异常。。。
错误1 abc

错误2您获取
ServiceException
xml节点的QdomeElement的方式不匹配

以下代码行:

QDomNode n = report.item(i);
QDomElement exception = n.firstChildElement("ServiceException");
应替换为以下内容:

<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>"); 
    }
}
QDomNode n = exceptions.item(i);
QDomElement exception = n.toElement();
在代码中,您试图迭代
QDomNodeList异常
list,但在循环中您调用
report.item(i)
,而不是
exceptions.item(i)