自己收集的qt读写XML资料Word文档格式.docx

上传人:b****1 文档编号:15319559 上传时间:2022-10-29 格式:DOCX 页数:8 大小:19.76KB
下载 相关 举报
自己收集的qt读写XML资料Word文档格式.docx_第1页
第1页 / 共8页
自己收集的qt读写XML资料Word文档格式.docx_第2页
第2页 / 共8页
自己收集的qt读写XML资料Word文档格式.docx_第3页
第3页 / 共8页
自己收集的qt读写XML资料Word文档格式.docx_第4页
第4页 / 共8页
自己收集的qt读写XML资料Word文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

自己收集的qt读写XML资料Word文档格式.docx

《自己收集的qt读写XML资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《自己收集的qt读写XML资料Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

自己收集的qt读写XML资料Word文档格式.docx

ReadOnly))

{

return;

}

_qDomDoc.setContent(&

_qFile))

_qFile.close();

}

2读取XML文件中的节点内容

假设XML文件格式如下

(1)

<

switchs>

switchsnmpip=211.87.235.136newwork=front>

/switch>

/switchs>

(2)

ip>

211.87.235.136<

/ip>

对于第一种情况,采用如下方法:

QDomElementdocElem=_qDomDoc.documentElement();

QDomNodenodeswitch=docElem.elementsByTagName("

switch"

);

//红色的为标签名

QDomElementelemnodeswitch=nodeswitch.toElement();

stringsnmpip=qPrintable(elemnodeswitch.attribute("

snmpip"

));

//network的也是如此方法获取

对于第二种情况,采用如下方法:

直接调用text()API就可以了

stringip=qPrintable(elementnodeip.text());

但是,假设文件中有多个同样的节点,如下

a>

b>

/b>

/a>

这样用elementsByTagName("

b"

)返回的就是一个childNodes()而不是一个单独的node了。

我们可以使用at()方法具体定位。

另外,我们还可以使用这样一种方法获取节点的值,假设XML文件如下

-+<

switchsnmpIp="

192.168.120.251"

network="

front"

>

name>

前端主交换机<

/name>

description/>

-<

ipList>

192.168.120.251<

/ipList>

rwCommunity>

public@120<

/rwCommunity>

workMode>

true<

/workMode>

workStatus>

/workStatus>

enableAlarm>

/enableAlarm>

snmpCount>

0<

/snmpCount>

memoryUtilizationRatio>

50.0<

/memoryUtilizationRatio>

cpuUtilizationRatio>

/cpuUtilizationRatio>

port>

161<

/port>

snmpStatus>

/snmpStatus>

privateName>

CZ-5_FA<

/privateName>

switchIndex>

topLeft<

/switchIndex>

我们可以先获取switch节点,然后得到其childNodes(),于是就可以使用at()方法来获取下面的每个节点了(注:

从0开始)

比如说,上面的那个ip节点就是nodeswitch.childNodes().at(3)。

这样做得好处就是不用担心重复的问题,只要你确定switch节点确定对了,底下的也就一定能确定了。

3返回某个节点下子节点的个数

这个简单,也是直接调API

QDomNodenodetagname=docElem.elementsByTagName(tagname).at(0);

//假设有多个tagname此处选第一个

intnum=nodetagname.childNodes().size();

好了,临时想起来就这么多。

以后想起来再添。

//============================================================================================================================

Qt学习之XML读写操作小结

2010年05月25日评论(0)|浏览(315)点击查看原文

在“QQ便签”项目组中我负责有关后台XML操作的实现部分,现在对在项目中用到的XML的相关操作进行简单的小结。

这几天搜集qt对XML格式文件的读写,着重于DOM这种方式,先将搜集的资料粘贴在下面,以一个完整的流程:

=======如下:

============

我们知道对XML的操作有两种方法,即DOM方式和SAX方式。

二者主要区别是:

DOM实现方式操作非常简单,但不适合处理过大文件;

而SAX实现方式是能处理很大的XML文件,但是需要开发者写

一些复杂的代码。

Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,由于在项目中涉及的文件不大,因此我们选用QDomDocument类来

处理。

项目中涉及便签的增删改查,对应于XML文件中相应标记的读、写和修改,下面分别介绍:

1.创建节点,将其写入XML文件,主要操作包括:

QDomDocumentdoc;

1).创建根节点:

QDomElementroot=doc.documentElement("

rootName"

);

2).创建元素节点:

QDomElementelement=doc.createElement_x("

nodeName"

3).添加元素节点到根节点:

root.appendChild(element);

4).创建元素文本:

QDomTextnodeText=doc.createTextNode("

text"

5).添加元素文本到元素节点:

element.appendChild(nodeText);

在本项目中,假设便签的属性有序号、名字、内容、字体、字号、颜色、粗细、斜体、下划线这几项,则在文件中添加一个便签节点的操作如下:

instruction=doc.createProcessingInstruction("

xml"

"

version="

1.0"

encoding="

UTF-8"

"

doc.appendChild(instruction);

QDomElementroot=doc.createElement_x("

Notes"

doc.appendChild(root);

QDomElementnote=doc.createElement_x("

note"

root.appendChild(note);

QDomElementno=doc.createElement_x("

no"

note.appendChild(no);

...

QDomTextno_text=doc.createTextNode("

001"

则得到一个便签节点,将其保存到test.xml文件中,代码如下:

QFilefile("

test.xml"

if(!

file.open(QIODevice:

WriteOnly|QIODevice:

Truncate|QIODevice:

Text))

return;

QTextStreamout(&

file);

out.setCodec("

doc.save(out,4,QDomNode:

EncodingFromTextStream);

file.close();

则test.xml文件:

?

xmlversion="

Notes>

note>

no>

001<

/no>

2010-05-10(13:

53:

24)<

content>

Ameeting!

/content>

font>

ScriptMTBold<

/font>

fontSize>

16<

/fontSize>

color>

#00ffff<

/color>

weight>

/weight>

fontItalic>

/fontItalic>

fontUnderline>

/fontUnderline>

/note>

/Notes>

上面是创建一个便签节点,若要继续添加便签节点,则需要在已有节点后增加一个新节点,并重写入XML文件。

2.加载、查找便签时要读取XML文档中的节点信息,DOM实现方式是将整个文档当作一个对象来装入内存进行处理,然后开发者可以访问这个对象中的每一个节点,每一个节点对应XML文件里

的一个标记。

主要操作包括:

1).读取根节点:

QDomElementroot=doc.documentElement();

2).读取第一个子节点:

QDomNodenode=root.firstChild();

3).读取下一个子节点:

node=node.nextSibling();

4).匹配结点标记:

node.toElement().tagName()=="

5).读取节点文本:

no=childNode.toText().data();

//========================遍历节点================

可以通过doc.childNodes()获得doc的所有的子节点列表QDomNodeList。

比如

QDomNodeListlist=doc.childNodes();

for(inti=0;

i<

list.count();

i++){

QDomNodenode=list.at(i);

//好的风格当然是把定义写在外面:

//qDebug()<

”nodenameis“<

node.nodeName();

”nodetypeis“<

.nodeType();

//==============================================

以下是项目中读取便签属性的函数实现代码:

voidMainWindow:

parseAttr(constQDomElement&

element)

QStringno,name,conten

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1