Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
Qt:如何使用QtXmlstreamreader从xml文件读取数组数据字符串_Xml_Qt_Xmlstreamreader - Fatal编程技术网

Qt:如何使用QtXmlstreamreader从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

我正在尝试将所有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 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;
    }

}