无法使用QXML / SAX和C ++读取XML文件

时间:2017-01-18 20:33:00

标签: c++ xml qt sax

我正在尝试在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>

0 个答案:

没有答案