• 6101阅读
  • 5回复

QXmlStreamReader的节点如何转换为QDomElement类型??? [复制链接]

上一主题 下一主题
离线bazzi2011
 

只看楼主 正序阅读 楼主  发表于: 2014-09-23

我有一个xml文件,层级数不固定,有时多有时少,写的时候是用的QDomElement。而读取时需要遍历它,用的是QXmlStreamReader的
while(!streamxml.atEnd())
if(streamxml.isStartElement())
   streamxml.readNext();
这种模式进行的遍历。
因为我找不到QDomElement遍历xml的方法(不知道有没有?)
现在有问题了,那就是我写入的时候,需要查询原表中存在不存在某个节点,所以我需要在遍历xml时返回一个QDomElement类型的变量。请问该如何把QXmlStreamReader的节点转换为QDomElement呢?求高人指点!
离线dbzhang800

只看该作者 5楼 发表于: 2014-09-24
回 bazzi2011 的帖子
bazzi2011:这个只能循环最外层的节点,我三楼的那个列表只能输出A就结束了。 (2014-09-24 14:33) 

一层的例子有了,多层的还有什么难度么
离线bazzi2011

只看该作者 4楼 发表于: 2014-09-24
回 dbzhang800 的帖子
dbzhang800:我对dom不熟,不多QDomXXXX 中的Manual中反复出现的下面的代码,应该是遍历吧
http://qt-project.org/doc/qt-5/qdomdocument.html
QDomElement docElem = doc.documentElement();
....... (2014-09-23 23:07) 

这个只能循环最外层的节点,我三楼的那个列表只能输出A就结束了。
离线dbzhang800

只看该作者 3楼 发表于: 2014-09-23
我对dom不熟,不多QDomXXXX 中的Manual中反复出现的下面的代码,应该是遍历吧

http://qt-project.org/doc/qt-5/qdomdocument.html

QDomElement docElem = doc.documentElement();

QDomNode n = docElem.firstChild();
while(!n.isNull()) {
    QDomElement e = n.toElement(); // try to convert the node to an element.
    if(!e.isNull()) {
        cout << qPrintable(e.tagName()) << endl; // the node really is an element.
    }
    n = n.nextSibling();
}
离线bazzi2011

只看该作者 2楼 发表于: 2014-09-23
回 dbzhang800 的帖子
dbzhang800:1. 应该没办法直接转换吧
2. QDomElement遍历,Qt Manual中直接有例子吧 (2014-09-23 16:36) 

还请版主不吝赐教,给找个QDomElement遍历的例子,我找很久都找不到,自己写又写不好。

我指的遍历是从头到尾的那种遍历,每个节点都过一遍的,
像下面这种结构
A
-B
--C
----D
-E
--F
----G
-H
--I
---J
-----K
-------L
这种很多级层,每个级层都不固定的那种,假设遍历输出它们的名字,就会从A输出到L,这种遍历我至今都没有找到,被迫才用QXmlStreamReader的,因为它能从头遍历到尾。
离线dbzhang800

只看该作者 1楼 发表于: 2014-09-23
1. 应该没办法直接转换吧

2. QDomElement遍历,Qt Manual中直接有例子吧
快速回复
限100 字节
 
上一个 下一个