QT5 C ++ QByteArray XML Parser

Я получаю следующий xml

<Tra Type="SomeText">
<tr>Abcdefghij qwertzu</tr>
<Rr X="0.0000" Y="0.0000" Z="0.0000" A="0.0000" B="0.0000" C="0.0000" />
<Ar A1="0.0000" A2="0.0000" A3="0.0000" A4="0.0000" A5="0.0000" A6="0.0000" />
<Er E1="0.0000" E2="0.0000" E3="0.0000" E4="0.0000" E5="0.0000" E6="0.0000" />
<Te T21="1.09" T22="2.08" T23="3.07" T24="4.06" T25="5.05" T26="6.04" T27="7.03" T28="8.02" T29="9.01" T210="10.00" />
<D>125</D>
<IP></IP>
</Tra>

через сокет, который сохраняет его в QByteArray с именем Data.

Я хочу извлечь и сохранить каждое значение из XML в различные переменные (некоторые как целые числа, некоторые как QString).

Моя главная проблема в том, что я не знаю, как различать строки XML, такие как <D>125</D> со значением между тегами и XML-строками, такими как <Te T210="10.00" T29="9... /> который получил значение в самой Tag-String.

Мой код выглядит так:

QByteArray Data = socket->readAll();

QXmlStreamReader xml(Data);
while(!xml.atEnd() && !xml.hasError())
{
.....
}

0

Решение

Там уже так много примеров, не так ли? знак равно

В любом случае, как сказал Фрэнк, если вы хотите читать данные (символы) из тегов — используйте QXmlStreamReader :: readElementText.

Кроме того, вы можете сделать это:

QXmlStreamReader reader(xml);
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "tr")
{
reader.readNext();

if(reader.atEnd())
break;

if(reader.isCharacters())
{
// Here is the text that is contained within <tr>
QString text = reader.text().toString();
}
}
}

reader.readNext();
}

Для атрибутов вы должны использовать QXmlStreamReader :: атрибуты который даст вам класс контейнерного типа атрибуты.

QXmlStreamReader reader(xml);
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "Rr")
{
QXmlStreamAttributes attributes = reader.attributes();
// This doesn't check if the attribute exists... just a warning.
QString x = attributes.value("X").toString();
QString y = attributes.value("Y").toString();
QString a = attributes.value("A").toString();
// etc...
}
}

reader.readNext();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]