Не удается прочитать атрибуты вложенного тега XML (QXmlStreamReader)

У меня есть XML-файл (мне пришлось упростить его):

<Line line1_attr1 = "value1" line1_attr2 = "value2">
<Term line1_term1_attr1 = "term1value1" line1_term1_attr2 = "term1value2">
term content
</Term>
<Term line1_term2_attr1 = "term2value1" line1_term2_attr2 = "term2value2">
term content
</Term>
</Line>
<Line line2_attr1 = "value1" line2_attr2 = "value2">
<Term line2_term1_attr1 = "term1value1" line2_term1_attr2 = "term1value2">
term content
</Term>
<Term line2_term2_attr1 = "term2value1" line2_term2_attr2 = "term2value2">
term content
</Term>
</Line>

Атрибуты хранятся в двух QMaps: mapString (атрибуты для строки) и MapTerm (атрибуты для термина).
Я могу прочитать атрибуты Line тег, но не для Term тег.
Ни это

if(token == QXmlStreamReader::StartElement)
{
if (xml.name() == "Line")
{
QXmlStreamAttributes attrib = xml.attributes();
for(auto e : mapString->keys())
{
mapString->insert(e, attrib.value(e).toString());
}
continue;
if (xml.name() == "Term")
{
QXmlStreamAttributes attrib = xml.attributes();
for(auto e : mapTerm->keys())
{
mapTerm->insert(e, attrib.value(e).toString());
}
continue;
}
}

ни

if(token == QXmlStreamReader::StartElement)
{
if (xml.name() == "Line")
{
QXmlStreamAttributes attrib = xml.attributes();
for(auto e : mapString->keys())
{
mapString->insert(e, attrib.value(e).toString());
}
continue;
}
if (xml.name() == "Term")
{
QXmlStreamAttributes attrib = xml.attributes();
for(auto e : mapTerm->keys())
{
mapTerm->insert(e, attrib.value(e).toString());
}
continue;
}

работает, код внутри if (xml.name () == «Срок») не выполняется.

0

Решение

Этот цикл является более кратким и должен работать:

QXmlStreamReader xml;
...
while (!xml.atEnd()) {
xml.readNext();
if (xml.isStartElement()) {
QMap<QString, QString> * map = nullptr;
if (xml.name() == "Line") map = mapString;
else if (xml.name() == "Term") map = mapTerm;
else continue;
QXmlStreamAttributes attrib = xml.attributes();
for (auto e : map->keys())
map->insert(e, attrib.value(e).toString());
}
}
0

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


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