QXMLStreamReader пропускает текстовые элементы - PullRequest
0 голосов
/ 31 января 2019

Я пишу файл XML с некоторыми данными.Позже я хочу прочитать файл XML и использовать данные в моей программе.Однако, когда я читаю его обратно, QXMLStreamReader, похоже, пропускает некоторые дочерние элементы.

Вот фрагмент из моего XML-файла:

<?xml version="1.0" encoding="UTF-8"?>
<TEMPROOT>
    <Parent1>
        <C0>238.195|1401.12</C0>
        <C1>795.475|1087.65</C1>
        <C2>995.748|756.766</C2>
    </Parent1>
    <Parent2>
        <left>248</left>
        <right>671</right>
        <Width>496</Width>
        <Height>583</Height>
    </Parent2>
    <Parent3>
        <Number>9</Number>
        <Blue>4</Blue>
        <Red>5</Red>
    </Parent3>
</TEMPROOT>

Он правильно читает Parent1 и его потомков.Мой код распознает Parent2, но пропускает его дочерние элементы и переходит непосредственно к Parent3, где он правильно читает свои дочерние элементы.

Вот мой код, в котором я WRITE выводит XML:

QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("TEMPROOT");

xmlWriter.writeStartElement("Parent1");
xmlWriter.writeTextElement("C0", str0);
xmlWriter.writeTextElement("C1", str1);
xmlWriter.writeTextElement("C2", str2);
xmlWriter.writeEndElement();

xmlWriter.writeStartElement("Parent2");
xmlWriter.writeTextElement("left", QString::number(rectCoord[0]));
xmlWriter.writeTextElement("right", QString::number(rectCoord[1]));
xmlWriter.writeTextElement("Width", QString::number(rectCoord[2]));
xmlWriter.writeTextElement("Height", QString::number(rectCoord[3]));
xmlWriter.writeEndElement();

xmlWriter.writeStartElement("Parent3");
xmlWriter.writeTextElement("Number", strNum);
xmlWriter.writeTextElement("Blue", strBlue);
xmlWriter.writeTextElement("Red", strRed);
xmlWriter.writeEndElement();

xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();

Вот как я READ в файле XML:

QXmlStreamReader xmlReader(&file);
QVector<QString> Qv1;
QVector<double> QV2;
QVector<QString> Qv3;
while (!xmlReader.isEndDocument())
{
    xmlReader.readNext();
    QString Name = xmlReader.name().toString();
    if (Name == "Parent1")
    {
        while (xmlReader.name().toString() != "Parent2")
        {
            if (xmlReader.name().toString().at(0) == "C")
            {
                QV1.append(xmlReader.readElementText());
            }
            xmlReader.readNext();
        }
     }
     else if (Name == "Parent2")
    {
        while (xmlReader.name().toString() != "Parent3")
        {
            if (xmlReader.name().toString() == "left")
            {
                QV2.append(xmlReader.readElementText().toDouble());
            }
            else if (xmlReader.name().toString() == "right")
            {
                QV2.append(xmlReader.readElementText().toDouble());
            }
            else if (xmlReader.name().toString() == "Width")
            {
                QV2.append(xmlReader.readElementText().toDouble());
            }
            else if (xmlReader.name().toString() == "Height")
            {
                QV2.append(xmlReader.readElementText().toDouble());
            }
            xmlReader.readNext();

        }
    }
    else if (Name == "Number")
    {
        Qv3.append(xmlReader.readElementText());
    }
    else if (Name == "Blue")
    {
        Qv3.append(xmlReader.readElementText());
    }
    else if (Name == "Red")
    {
        Qv3.append(xmlReader.readElementText());
    }
}

Проблема MAIN заключается в том, что переменная Name, которая является именемтекущего элемента XML в xmlReader идет от Parent2 прямо к Parent3, игнорируя дочерние элементы Parent2.Дети Parent1 и Parent3 читаются без проблем.Я делаю что-то не так, когда я читаю или пишу XML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...