我正在尝试在QT中读取.xml文件,但每次我都这样做,QXmlSimpleReader.parse
将返回false - 请参阅: qDebug()<< “解析失败”; 位于 descriptionfilereader 类的底部。
为什么会失败?我将.xml文件放在与代码相同的文件夹中。 (注意:我将XML复制到记事本中并将其保存为带有ANSI enconding的.xml。我的计算机还显示该文件是XML文档。)
代码说明:在main中创建了DescriptionFileReader对象,并且使用解析器类的实例完成了读取的处理程序。
(编辑:我已经将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>