读书人

QXmlStreamReader 读取xml有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

QXmlStreamReader 读取xml问题
我用QXmlStreamReader读取下面的xml时, GLOBAL这块老是读取不到,但是用tinyXml确是能够正常读取。

XML code
<?xml version="1.0" encoding="GBK"?><!-- TEST --><ToDo>    <!-- WELCOME --></ToDo><!-- 全局设置 --><GLOBAL>    <!-- UU -->        <item APP_CLIENT_IP="10.10.10.10" APP_SERVER_IP="10.10.10.11"/></GLOBAL>


请问下QXmlStreamReader是不支持两个并列的startElement么?

测试代码如下:
C/C++ code
    QString fileName("xml.xml");    QFile file(fileName);    if (!file.open(QFile::ReadOnly | QFile::Text))     {        QMessageBox::warning(this, tr("QXmlStream Bookmarks"),                              tr("Cannot open file %1:\n%2.")                              .arg(fileName)                              .arg(file.errorString()));         return;    }    QXmlStreamReader xml;    bool succ = false;    xml.setDevice(&file);    while (!xml.atEnd()) {        qDebug() << "name " << xml.name() << "text " << xml.readElementText() << "tokentype " << xml.tokenType();        if (xml.isCharacters()) {            //qDebug() << xml.text();        }        xml.readNext();        qDebug() << "2 name " << xml.name() << "text " << xml.readElementText() << "tokentype " << xml.tokenType();        qDebug() << xml.errorString();    }


测试打印输出为:

name "" text "" tokentype 0
2 name "" text "" tokentype 2
""
name "" text "" tokentype 2
2 name "" text "" tokentype 7
""
name "" text "" tokentype 7
2 name "ToDo" text "

" tokentype 4
""
name "ToDo" text "" tokentype 5
2 name "" text "" tokentype 7
""
name "" text "" tokentype 7
2 name "GLOBAL" text "" tokentype 1
"Extra content at end of document."



[解决办法]
你用dom模式试试

[解决办法]
读不到就对了,一个XML文件只允许有一个根元素。你的文件里存在两个!
[解决办法]
C/C++ code
  if(isEndElement())      {         if(name() == "item")          {                 qDebug()<<"......";        }    }
[解决办法]
读不到就证明:

<DATA>
...
</DATA>
只能这种标准格式
[解决办法]
探讨

引用:
读不到就对了,一个XML文件只允许有一个根元素。你的文件里存在两个!


XML标准么? 主要我用 tinyxml这个库读起来很正常的。。

http://sourceforge.net/projects/tinyxml/?source=directory

读书人网 >QT开发

热点推荐