Qt:如何使用QtXmlstreamreader从xml文件读取数组数据字符串
我正在尝试将所有xml数据加载到QList中。 我不确定从xml获取所有数据的编码是否正确 当我试图运行它时,xml中的一些信息在输出中丢失了 以下是xml元素:Qt:如何使用QtXmlstreamreader从xml文件读取数组数据字符串,xml,qt,xmlstreamreader,Xml,Qt,Xmlstreamreader,我正在尝试将所有xml数据加载到QList中。 我不确定从xml获取所有数据的编码是否正确 当我试图运行它时,xml中的一些信息在输出中丢失了 以下是xml元素: 1. 6. 2. 5. 3. 5. 4. 2. 5. 4. 6. 8. 7. 8. 8. 8. 9 8. 10 8. 11 2. 23 2. 112 8. 20A 2. 40A 4. 15C 4. 以下是代码: 检测变量h 基于下一个示例:我实现了以下解决方案: 类CANListParser{ 公众: 静态QList parser
1.
6.
2.
5.
3.
5.
4.
2.
5.
4.
6.
8.
7.
8.
8.
8.
9
8.
10
8.
11
2.
23
2.
112
8.
20A
2.
40A
4.
15C
4.
以下是代码:
检测变量h
基于下一个示例:我实现了以下解决方案: 类CANListParser{ 公众: 静态QList parserXML(QIODevice*设备){ QList can_标识; QString系统; QXmlStreamReader; setDevice(设备); 而(!xmlReader.atEnd()&&!xmlReader.hasrerror()){ QXmlStreamReader::TokenType token=xmlReader.readNext(); if(令牌==QXmlStreamReader::StartDocument){ 继续; } if(令牌==QXmlStreamReader::StartElement){ if(xmlReader.name()=“CANBUS”) 继续; if(xmlReader.name()=“系统”){ system=xmlReader.attributes().value(“ID”).toString(); 继续; } if(xmlReader.name()=“CAN”){ CANList c=parseCANList(系统,xmlReader);
我能找到解决这个问题的办法吗。 显然这是while循环的问题 解决办法如下:
void DetectionVar::ReadXML()
{
filename = QCoreApplication::applicationDirPath() + "/" + "CANBus_Data.xml";
qDebug() << filename;
QFile f(filename);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Cannot read file" << f.errorString();
return;
}
xmlReader.setDevice(&f);
while(!xmlReader.atEnd())
{
xmlReader.readNext();
if (xmlReader.isStartElement())
{
if (xmlReader.name() == "CANBUS")
{
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "SYSTEM" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.System = xmlReader.attributes().value("ID").toString();
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "CAN" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.CAN_ident = xmlReader.attributes().value("ID").toString();
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "ID")
{
DataCAN.ID = xmlReader.readElementText();
}
else if (xmlReader.name()== "Length")
{
DataCAN.Length = xmlReader.readElementText();
}
}
can_identity.append(DataCAN);
}
}
}
}
}
}
}
if (xmlReader.hasError())
{
qDebug() << "XML Error: " << xmlReader.errorString().data();
}
f.close();
for (int i = 0; i <can_identity.length(); i++ )
{
qDebug()<< "System: " + can_identity.at(i).System;
qDebug()<< "Ident: " + can_identity.at(i).CAN_ident;
qDebug()<< "ID: " + can_identity.at(i).ID;
qDebug()<< "Length: " + can_identity.at(i).Length;
}
}
void DetectionVar::ReadXML()
{
filename=QCoreApplication::applicationDirPath()+“/”+“CANBus_Data.xml”;
qDebug()
void DetectionVar::ReadXML()
{
filename = QCoreApplication::applicationDirPath() + "/" + "CANBus_Data.xml";
qDebug() << filename;
QFile f(filename);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Cannot read file" << f.errorString();
return;
}
xmlReader.setDevice(&f);
while(!xmlReader.atEnd())
{
xmlReader.readNext();
if (xmlReader.isStartElement())
{
if (xmlReader.name() == "CANBUS")
{
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "SYSTEM" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.System = xmlReader.attributes().value("ID").toString();
}
else if (xmlReader.name()== "CAN" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.CAN_ident = xmlReader.attributes().value("ID").toString();
}
else if (xmlReader.name()== "ID")
{
DataCAN.ID = xmlReader.readElementText();
}
else if (xmlReader.name()== "Length")
{
DataCAN.Length = xmlReader.readElementText();
}
can_identity.append(DataCAN);
}
}
}
}
f.close();
for (int i = 0; i <can_identity.length(); i++ )
{
qDebug()<< "System: " + can_identity.at(i).System;
qDebug()<< "Ident: " + can_identity.at(i).CAN_ident;
qDebug()<< "ID: " + can_identity.at(i).ID;
qDebug()<< "Length: " + can_identity.at(i).Length;
}
}
"System: PCU"
"Ident: "
"ID: "
"Length: "
"System: PCU"
"Ident: veh Ops Status Lights"
"ID: "
"Length: "
"System: PCU"
"Ident: veh Ops Status Lights"
"ID: 1"
"Length: "
"System: PCU"
"Ident: veh Ops Status Lights"
"ID: 1"
"Length: 6"
qDebug() << can_identity;
(("PCU", "veh Ops Status Lights", "1", "6"), ("PCU", "veh Sensors", "2", "5"), ("PCU", "veh Faults", "3", "5"), ("PCU", "PCM Faults", "4", "2"), ("PCU", "faults", "5", "4"), ("PCU", "Fuel level", "6", "8"), ("PCU", "Speed", "7", "8"), ("PCU", "Engine Hr Req", "8", "8"), ("PCU", "Odo and Trip", "9", "8"), ("PCU", "Trip 2", "10", "8"), ("IOU", "Sync Counter", "11", "2"), ("IOU", "IOU1 Engine", "23", "2"), ("IOU", "IOU1 Alive", "112", "8"), ("IOU", "IOU1 PCM Fault", "20A", "2"), ("IOU", "IOU1 IOM Fault", "40A", "4"), ("IOU", "IOU1 UNIT Fault", "15C", "4"))
void DetectionVar::ReadXML()
{
filename = QCoreApplication::applicationDirPath() + "/" + "CANBus_Data.xml";
qDebug() << filename;
QFile f(filename);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Cannot read file" << f.errorString();
return;
}
xmlReader.setDevice(&f);
while(!xmlReader.atEnd())
{
xmlReader.readNext();
if (xmlReader.isStartElement())
{
if (xmlReader.name() == "CANBUS")
{
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "SYSTEM" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.System = xmlReader.attributes().value("ID").toString();
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "CAN" && xmlReader.attributes().hasAttribute("ID"))
{
DataCAN.CAN_ident = xmlReader.attributes().value("ID").toString();
while(xmlReader.readNextStartElement())
{
if (xmlReader.name()== "ID")
{
DataCAN.ID = xmlReader.readElementText();
}
else if (xmlReader.name()== "Length")
{
DataCAN.Length = xmlReader.readElementText();
}
}
can_identity.append(DataCAN);
}
}
}
}
}
}
}
if (xmlReader.hasError())
{
qDebug() << "XML Error: " << xmlReader.errorString().data();
}
f.close();
for (int i = 0; i <can_identity.length(); i++ )
{
qDebug()<< "System: " + can_identity.at(i).System;
qDebug()<< "Ident: " + can_identity.at(i).CAN_ident;
qDebug()<< "ID: " + can_identity.at(i).ID;
qDebug()<< "Length: " + can_identity.at(i).Length;
}
}