Чтение нескольких атрибутов из XML в QT5 - PullRequest
0 голосов
/ 30 апреля 2020

У меня XML со структурой, подобной этой:

<?xml version="1.0"?>
            <Element id="123">
                    <Type>Type-of-element</Type>
                    <time>2020-02-20 20:20:20<time>
                    <part name="part1" type="Mech">Back</part>
                    <part name="part2" type="Mech">Back</part>
                    <part name="part3" type="Mech">Front</part>
                    <part name="part4" type="Electric">Side-left</part>
                    <part name="part5" type="Electric">Side-right</part>
                    <part name="part6" type="Electric">Front</part>
            </Element>  

Я написал эту функцию, чтобы прочитать это

QXmlStreamReader x(xml);

QString partName;
QString partType;
QString partValue;
unsigned long long int elementID;
QString type;
QString time;

if (x.readNextStartElement()){
    if(x.name()=="Element"){
        elementID=x.attributes().value("id").toULongLong();
        qDebug()<<elementID;
    }
    while(x.readNextStartElement()){
        if(x.name()=="part"){
            partName = x.attributes().value("name").toString();
            partType = x.attributes().value("type").toString();
            partValue = x.readElementText();
            qDebug()<<partName<<" "<<partType<<" "<<partValue;
        }
        else if(x.name()=="Type"){
            type=x.readElementText();
            qDebug()<<type;
        }
        else if(x.name()=="time"){.
            time=x.readElementText();
            qDebug()<<time;
        }
        else{
            qDebug()<<"invalid name: "<<x.name();
        }
    }

}

И консольную печать просто так:

123 "Тип элемента" "20020-02-20 20:20:20"

Таким образом, чтение нескольких атрибутов не сработало. Как я могу это прочитать?

1 Ответ

0 голосов
/ 30 апреля 2020

Я изменяю структуру на:

<Element id="123">
      <Type>Type-of-element</Type>
      <part name="part1" type="Mech">Back</part>
      <part name="part2" type="Mech">Back</part>
      <part name="part3" type="Mech">Front</part>
      <part name="part4" type="Electric">Side-left</part>
      <part name="part5" type="Electric">Side-right</part>
      <part name="part6" type="Electric">Front</part>
      <time>2020-02-20 20:20:20<time>
</Element> 

И теперь это работает. Но я не знаю почему.

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