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