2014-10-03 56 views
1

我有一个关于读取XML文件中的问题:Qt的XML阅读元素和仅获得root

<table> 
    <100000 /> 
    <100001 name="void" type="ref" cat="ref"/> 
    <100002 name="noref" type="err" cat="ref"/> 
    <100003 name="notype" type="err" cat="ref"/> 
    <100004 name="nostring" type="err" cat="ref"/> 
    <100005 name="noobj" type="err" cat="ref"/> 
</table> 

我想有子元素(100000 - 100005)的全名的QList,但尼特的属性值。

这是我到目前为止的代码:

QList<QString> xmlActions::GetXMLID (QFile *XMLIndex) 
{ 
    QList<QString> xList; 

    if (XMLIndex->open(QIODevice::ReadOnly)) 
    { 
     QXmlStreamReader reader (XMLIndex->readAll()); 
     XMLIndex->close(); 
     while(!reader.atEnd() && !reader.hasError()) 
      { 
      QXmlStreamReader::TokenType token = reader.readNext(); 
      if(token == QXmlStreamReader::StartElement) 
      { 
       if(reader.name().toString() == QLatin1String("table")) 
       { 
        continue; 
       } 

       xList << reader.name().toString(); 
      } 
     } 
    } 
    return xList; 
} 

我只得到一个empy列表。如果我注释掉这个:

if(reader.name().toString() == QLatin1String("table")) 
{ 
    continue; 
} 

列表包含的唯一东西是'表'(起始元素)。我想这可能很简单,但我不明白。

回答

2

该文件不是有效的XML。 XML元素的名称不能以数字开头。

引述official docs (XML 1.0 fifth edition) 2.3节:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
[5] Name ::= NameStartChar (NameChar)* 

由于QXmlStreamReader被设计成只阅读格式良好的XML文档,什么你要在技术上是未定义的行为。读者可能只是试图尽可能地应付。