0

我有 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>

属性存储在两个 QMap 中:mapString(Line 的属性)和MapTerm(Term 的属性)。我可以读取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() == "Term")中的代码未执行。

4

1 回答 1

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());
  }
}
于 2015-08-16T09:55:28.317 回答