Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT使用DOM读取XML文件_C++_Qt - Fatal编程技术网

C++ QT使用DOM读取XML文件

C++ QT使用DOM读取XML文件,c++,qt,C++,Qt,我想读取一个XML文件并将元素存储到对象的QList中。下面是我编写的代码的一部分。当我阅读时,它没有什么可储存的。在控制台上,所有输出都是“”; 我做得不好的是什么 XML内容 <Cars> <Car> <Owner> <FirstName> John <FirstName/> <LastName> Smith <LastName/> <Addre

我想读取一个XML文件并将元素存储到对象的QList中。下面是我编写的代码的一部分。当我阅读时,它没有什么可储存的。在控制台上,所有输出都是“”; 我做得不好的是什么

XML内容

<Cars>
   <Car>
     <Owner>
       <FirstName> John <FirstName/>
       <LastName> Smith <LastName/>
       <Address> Canada <Address/>
     <Owner/>
   <Car/>
........More data
........More cars
<Cars/>

约翰
史密斯
加拿大
……更多数据
……更多的汽车
xml读取代码

class Owner
{
private:
    QString firstName;
    QString lastName;
    QString address;
public:
    Owner();
    Owner(QString fName, QString lName, QString addr);
    QString getFirstName()const;
    QString getLastName() const;
    QString getAddress() const;
    void setFirstName(QString fName);
    void setLastName(QString lName);
    void setAddress(QString addr);
};

class Vehicle
{
private:
    Owner newOwner;
    QList<Verification> newVerification;
    Registration newRegistration;
    GeneralData newGeneralData;
    Equipment newEquipment;
    Characteristics newCharacteristics;

public:

    Vehicle();
    Owner getOwner() const;
    QList<Verification> getVerifications() const;
    int getVerificationsNumber() const;
    Registration getRegistration() const;
    GeneralData getGeneralData() const;
    Equipment getEquipment() const;
    Characteristics getCharacteristics() const;
    void setOwner(Owner owner);
    void setVerification(QList<Verification> ver);
    void setRegistration(Registration reg);
    void setGeneralData(GeneralData genData);
    void setEquipment(Equipment equipment);
    void setCharacteristics(Characteristics characteristics);
};


QList<Vehicle> readXML(QString fileName){
    QList<Vehicle> vehiclesList;
    QDomDocument document;
    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "Failed to open file";
    } else {
        if(!document.setContent(&file)){
            qDebug() << "Failed to load document";
        } else {
            qDebug() << "Finished";
        }
        file.close();
    }

    QDomElement root = document.firstChildElement();
    QDomNodeList carElements = root.elementsByTagName("Car");
    for(int i = 0; i < carElements.count(); i++){
        //Car
        //****************************************************************
        //****************************************************************
        QDomNode carNode = carElements.at(i);

        //Owner
        //****************************************************************
        QDomElement ownerElement = carNode.firstChildElement("Owner");

        //FirstName
        QDomElement fNameElement = ownerElement.firstChildElement("FirstName");
        QString fName = fNameElement.text();
        qDebug() << fName; // it outputs " "


        //LastName
        QDomElement lNameElement = fNameElement.nextSiblingElement("LastName");
        QString lName = lNameElement.text();
        qDebug() << lName; // it outputs " "

        //Address
        QDomElement addressElement = lNameElement.nextSiblingElement("Address");
        QString address = addressElement.text();
        qDebug() << address; // it outputs " "

        //create owner object
        Owner newOwner;
        newOwner.setFirstName(fName);
        newOwner.setLastName(lName);
        newOwner.setAddress(address);
    }
}
类所有者
{
私人:
QString名字;
QString lastName;
QString地址;
公众:
所有者();
所有者(QString fName、QString lName、QString addr);
QString getFirstName()常量;
QString getLastName()常量;
QString getAddress()常量;
void setFirstName(QString fName);
void setLastName(QString lName);
无效设置地址(QString地址);
};
等级车辆
{
私人:
所有者新所有者;
QList新验证;
注册登记;
新通用数据;
新设备;
新特点;
公众:
车辆();
所有者getOwner()常量;
QList getVerifications()常量;
int getVerificationsNumber()常量;
注册getRegistration()常量;
GeneralData getGeneralData()常量;
设备获取设备()常数;
特征getCharacteristics()常量;
无效设置所有者(所有者);
无效设置验证(QList版本);
注册无效(注册登记);
void setGeneralData(GeneralData genData);
无效设备(设备);
空隙特征(特征);
};
QList readXML(QString文件名){
QList车辆列表;
QDOM文件;
QFile文件(文件名);
如果(!file.open(QIODevice::ReadOnly | QIODevice::Text)){

qDebug()您的XML示例格式不正确:

<FirstName> John <FirstName/>
约翰
应改为:

<FirstName>John</FirstName>
约翰

它在调试器中的何处停止?您的代码中似乎没有错误检查。请注意,QT不相信使用异常,并且QtXML肯定已经使用过(而且很可能仍然使用过)这里有很多地方,你可以在错误条件下获取构造的对象。你可能会发现,使用支持XPATH的XML DOM解析器会更容易。