Не удается прочитать в XML-файле с использованием QXML / SAX и переполнения стека

Я пытаюсь прочитать в XML-файл в QT, но каждый раз, когда я делаю, QXmlSimpleReader.parse вернет false — смотрите: QDebug ()<< «parse fail»; в нижней части descriptionfilereader учебный класс.

Почему это не удается? У меня есть XML-файл в той же папке, что и код. (Примечание. Я скопировал XML-файл в блокнот и сохранил его в формате .xml с добавлением ANSI. Мой компьютер также показывает, что файл является документом XML).

Объяснение кода: объект DescriptionFileReader создан в main, а обработчик чтения выполняется с использованием экземпляра класса анализатора.

(редактировать: я изменил XML-документ, чтобы прочитать его в более простом виде в надежде найти проблему проще)

Descriptionfilereader.cpp:

#include "descriptionfilereader.h"#include "parser.h"#include <QDebug>
#include <iostream>
#include <QXml.h>
#include <string>
#include <QXmlDefaultHandler>
using namespace std;

DescriptionFileReader::DescriptionFileReader()
{

}

DescriptionFileReader::~DescriptionFileReader()
{

}void DescriptionFileReader::Read()
{

Parser handler;
QXmlSimpleReader xmlReader; //Intialize xmlReader

xmlReader.setContentHandler(&handler);
xmlReader.setErrorHandler(&handler);

QFile xmlFile ("notes.xml");

QXmlInputSource source (&xmlFile);

//handler.start     \/ this returns false
bool ok = xmlReader.parse (source);

if (!ok)
qDebug()<< "parse fail";

}

parser.cpp:

#include "parser.h"#include <stdio.h>
#include <qstring.h>
#include <qxml.h>
#include <QTextStream>
#include <iostream>
#include <QDebug>

using namespace std;

static const char TAG_ITEM[] = "description";
static const char TAG_MATERIAL[]= "Material";
static const char TAG_MOUNT[] = "Mount";
QString currElement_;bool Parser::characters(const QString& text)
{
if( currElement_ == TAG_ITEM) {}

else
{return false;}
return true;
}

bool Parser::startElement(const QString&, const QString& localName,
const QString& qName,
const QXmlAttributes& atts)
{
if( localName == TAG_ITEM)
{
qDebug()<< "It's coming";
}
else if( localName == TAG_MATERIAL ) {}
else if( localName == TAG_MOUNT ){}
else{return false;}

currElement_ = localName;
return true;
}
bool Parser::endElement( const QString&, const QString& localName, const QString& )
{
if( localName == TAG_ITEM)
{
qDebug()<< "It's gone";
}
else if( localName == TAG_MATERIAL ) {}
else if( localName == TAG_MOUNT ){}
else{return false;}

currElement_ = localName;

return true;
}

XML-документ:

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]