自己收集的qt读写XML资料Word文档格式.docx
- 文档编号:15319559
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:8
- 大小:19.76KB
自己收集的qt读写XML资料Word文档格式.docx
《自己收集的qt读写XML资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《自己收集的qt读写XML资料Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自己 收集 qt 读写 XML 资料