admin 管理员组文章数量: 1086019
2024年4月20日发(作者:之梦最终下载页)
维普资讯
…………………………………………………………
实用第一 智慧密集
…………………………………………………………
树型 件XML支件之向的数据钴移
樊延平
摘要本文就树型控件和XML文档之间的数据转移技术进行了探讨,通过递归调用的方
法.避免陷入树型控件和XML文档组织数据的复杂逻辑关系中去,简洁了代码,
提高了效率。
关键词树型控件,XML,数据转移
AfxMessageBox( OLE initialization Error! ):
一
、
引言
树型控件作为一种数据展示和操控控件,具有目录式、分
2。读写XML文件
XML作为一种独立的技术框架,以及数据的半结构化存
储方式,都决定了对XML文件中数据的访问和操作具有一定
的特殊性。需要通过专门的接口才能访问。在编程中,首先应
定一个访问XML文件的文档对象,然后创建该对象,并调入
目标XML文件来存取和组织数据。具体实现代如下:
CXMLDOMDocument2 Doc; //定义XML文档对象
try{
Doc= CDOMDocument40Class:: CreateXMLDOMDocu—
类管理的特征,便于直观、快捷的处理业务数据,得到了广大
软件设计人员和软件客户的认可和青睐。但是随着数据存储技
术和理论的发展,XML技术作为一种成熟的数据存储和管理
技术,也f3益得到人们的广泛关注。由于它们各自所具有的优
点,以及它们在数据的展示形式上的相似性,树型控件和
XML技术在软件设计中一起应用的案例越来越多。本文就程
序设计中树型控件和XML文件之间的数据转移问题进行探
讨,并设计了相应的数据转移程序。
ment2()://创建XML文档对象 }
catch(CComException pE)
pE一>Delete():
return; }
Doc。SetAsynclFALSE):
{
二、XML特点
随着XML技术的不断发展和完善,XML逐渐成为数据存
储和交换的标准格式,广泛应用于包括小型的配置文件到公司
级数据仓库等数据管理和服务行业。XML文档的半结构化数
据组合特征,方便了人们管理数据的需要。它在数据的表示和
存储方面具有许多优势,主要表现在:
1.天然的树形结构。由于XML以树型结构组织数据,符
if(Doc.Load((LPCSTR)strFileName))//)jl ̄载XML文件{
entityNode=Doc。SeIectSingIeNode( 学科门类 ):
//访问×ML文件的第一个节点
strNodeName=entityNode.GetNodeName():
//获得×ML文档中的节点名称
hltem=re_Tree.Insertltem(strNodeName.TVI-ROOT):
合了人们认识和组织事物的习惯,因此选用XML形式描述不
同事物之间的逻辑关系,是一种自然的选择。这样,基于
//将XML节点名称增加到树型结构的根节点的位置 }
else (
CStringstr( 文件不存在或者文档内容为空! ):
MessageBox(str.NULL,MB_OK):
return; }
XML标准丰富的功能,能够有效地降低成本,提高效率。
2.良好的自描述性。基于XML的半结构化数据具有强大
的自描述能力,能够大大增强数据的独立性,便于不同事物之
间独立地存储数据,同时又能保证不同节点之间的逻辑关系。
3.将XML文件的半结构化数据转移到树型控件
树型控件和XML文件的数据转移,需要将XML文件的半
结构化数据转移到树型控件,以及将树型控件中的数据转移到
xML文件。
三、编程设计
1.接口初始化
将XML文件的半结构化数据转移到树型控件时,应首先
访问XML文件的根节点,获得根节点的名称,并增加的相应 由于对XML文件的操作,应用了OLE技术,因此,在系
统创建时,应首先调用AfxOlelnit()函数初始化OLE动态链接
库。具体代码如下:
if(!Af)(Olelnit())
的树型控件的根节点的位置,然后调用递归函数Bulit一
r eenl0瑚【)【MLFiles f HTREErrEM hltem,CXMLDOMNode entityN—
ode)实现数据的转移,下面详细介绍该递归函数的设计流程及
维普资讯
编码实现。
//根据XML文件的内容生成树型控件
Void BulitTreeFromXMLFilesI HTREEITEM hltem。CXML-
DOMNode entityNode) f
HTREEtTEM hSubltem; //树型子节点
CStringstrNodeName=一://子节点名称
BOOL BeWorking; //是否拥有子节点标志
intcount; //子节点的个数
CXMLDOMNodeList nodeLists;//子节点列表
BeWorking=entityNode.HasChiIdNOdes():
//节点entiytNode是否拥有子节点
if(BeWorking) {
//有子节点时,获得所有的子节点并记录子节点的个数
nodeListS=entiytNode.GetChildNodes(1:
ocunt=nodeLis,ts.GetLengthI):
}
inti=0://计数器
//遍历节点entityNode拥有的所有子节点,并增加到树型控
??
while fBeWorking&&(i<count))
//当前节点有子节点时.并且i<count fl
//获得第i个子节点,并将节点名称增加到树型控件的相应
//位置
entiytNode=nodeLists.GetItemIi):
strNodeName=entiytNode.GetN0d6NameI):
hSubltem=m
_
Tree.Insertltem(strNodeName,hltem):
//判断第i个子节点是否拥有子节点,进入递归调用
BulitTreeFromXMLFiles I hSubltem,entiytNode):
i-I--I-: } }
4.将树型控件中的数据转移到XML文件
将树型控件中的数据转移到XML文件时,只需要将树型
结构的内容依次增加到相应的XML文档对象DOC中,直到数
据转移完毕,将该文档对象保存成XML文件即可。其主要过
程可通过递归函数BulitXMLFilesFromTree(HTREEITEM hhem,
CXMLDOMElemententityNode,CXMLDOMDocument2 Doc 1)来实
现。
Void BulitXMLFilesFromTreeI HTREEITEM hltem,CXML-
DOMElement entityNode.
CXMLDOMDoe.urnent2 Docl}
{
HTREEITEM hSubltem;
CS ̄ing strNodeName=一: //子节点名称
BOOL BeWorking: //是否拥有子节点标志
int coupt=0: //子节点的个数
CObArray nodeLists;
nodeLists.SetSize(100.一1): //设置对象数组
BeWorking=mJroe.ItemHasChildren I hltem):
//树型控件中的当前节点是否拥有子节点
//当前节点是否拥有子节点时,记录所有的子节点,并计算
//子节点的数量
扦(BeWorking)
{
hSubltem=m
.
Tree.GetChildltem I hltem):
ocunt-I-+:
nodeLists,: SetAtI count一1.ICObieGtI-)hSubltem):
hSubltem=mJree.GetNextSiblingltem l hSubltem):
while I hSubltem!=NULL)
{
count-I--I-:
nodeLists.SetAtl count一1.1CObject})hSubltem):
hSubltem=mJree.GetNextSiblingltemIhSubltem):
}
}
inti=0: //计数器
//遍历hltem的所有子节点,并增加到DOC对象中
hwile(BeWorking&&(i<COUnt1)//当前节点有子节点时
f
//获得第i个子节点
hSubltem IHTREEITEM)nodeLists.GetAtI;):
strNodeName=m
_
Tree.GetltemText(hSubltem):
CXMLDOMElement newNode;
newNode=Doc1.CreateElementIstrNodeName):
’
entityNode.AppendChild I newNode):
//增加到DOC对象的相应位置
//判断第i个子节点是否拥有子节点,进入递归调用
BulitXMLFilesFromTree I hSubltem.newNode.Doc1):
i十-I-:
}
nodeLists.RemoveAII I):
}
童—∞j-t蝣 晤面 一
i_D ■1 毫 叠 }
▲
半 一
s
敲
虢
工
电子 。
龃
舡‘ ’}一
l
h,d ̄IL I
...................
_-J
鼍 ~警薛 ~
程序运行界面
四、结语
通过递归函数实现XML文档数据和树型控件数据之间的
转移,不仅代码简洁,便于理解,而且能够较大的提高程序的
运行效率。本软件代码在Win XP操作系统上,安装
MSXML4.0开发包,VC++6.0中编译调试通过。
(收稿日期:2006年12月16日1
版权声明:本文标题:树型控件和XML文件之间的数据转移 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713585609a642004.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论