delphi实现删除XML结点
来源:互联网 发布:四班三倒倒班日历软件 编辑:程序博客网 时间:2024/06/06 19:11
遇到了点问题,竟然没办法删除掉,到底是哪里出了问题呢???
删除一个结点的时候,需要定位到要删除的结点,而在定位到这个结点之前,可能因为有不少和这个结点是同等级的,也就是需要用结点的值来定位,在定位对同等级的结点之前,要定位到要删除的结点的父结点,也就是只要定位到要删除的结点的父结点,然后根据结点值,就可以搜索到要删除的结点了。
在网上找到一个算法,哇哈哈。
(2)删除结点
function removeNode(XMLName:string;proID:integer):integer;
var
xmlDoc:IXMLDocument;
rootNode,CNode,NNode:IXMLNode;
iValue,iReturn:integer;
sValue:string;
begin
result := -1 ;
if not fileExists(XMLName)then exit;
xmlDoc := TXMLDocument.Create(nil);
xmlDoc.Active :=True; iReturn:=-1;
try
try
xmlDoc.LoadFromFile(XMLName) ;
xmlDoc.Encoding :='GB2312';
rootNode := xmlDoc.ChildNodes.FindNode('Document');
CNode := rootNode.ChildNodes.FindNode('product');
if CNode<>nil then
begin
iValue:=CNode.Attributes['proID'];
while (proID<>iValue) and (CNode<>nil)do //找某
begin
NNode := rootNode.ChildNodes.FindSibling(CNode,1);
CNode := NNode;
if CNode<>nil then iValue:=CNode.Attributes['proID'];
end;
end;
if CNode<>nil thenrootNode.ChildNodes.Remove(CNode); //找到,删除
xmlDoc.SaveToFile(XMLName) ;
iReturn := 0;
except
iReturn:=-1;
end;
finally
xmlDoc :=nil ;
result :=iReturn;
end;
end;
不过还要改造一下才行,一点通用性都没有。设计这个算法的人还真是懒啊,另外,我还在PUDN上面发现了很多类似的算法,不过算了,试一下这个先吧。
并且,突然对XML的文法相当的感兴趣啊,我也要自己设计一个。而且算法也不复杂,使用栈就可以完成所有结点的配对检查。然后结点可以用一棵树来存储,根结点对应第一个结点,往下是叶子。
------------我是华丽的分割线-------------
<?xml version="1.0" encoding="GB2312"?>
<Params>
<FileOperate>
<Setting>
<Type>0</Type>
<SavePath>C:/U_0127</SavePath>
</Setting>
<History>
<Path>C:/U_0127/Demo000002.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000360.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000361.csv</Path>
</History>
</FileOperate>
</Params>
-----------------我是华丽的分割线--------------
比如上面的XML,经过语法检查之后,生成的树应该是以下这样子的,并且使用链表来存储各个结点。
Param--
|FileOperate--
|Setting--
|Type(0)
|SavePath(C:/U_0127)
|History--
|Path(C:/U_0127/Demo000002.csv)
|Path(C:/U_0127/Demo000362.csv)
|Path(C:/U_0127/Demo000362.csv)
|Path(C:/U_0127/Demo000360.csv)
|Path(C:/U_0127/Demo000362.csv)
|Path(C:/U_0127/Demo000361.csv)
这样子,对于树的各种操作:创建XML树,增加结点/结点属性,查询结点值/属性值,修改结点值/属性值,删除结点/结点属性,读入XML文件创建成XML树,输出XML树到文件。
-----------------------我是华丽的分割线----------------
对于上面的XML文件,要将某个结点删除的算法为:
首先确定要删除的结点的路径,比如我要删除<Path>C:/U_0127/Demo000360.csv</Path>这个结点,
则可以确定其路径为:Params->FileOperate->History
然后,再查找结点History的子结点,只要查找到值为C:/U_0127/Demo000360.csv,就可以将其删除了。
删除后的XML文件为:
----------------我是华丽的分割线--------------
<?xml version="1.0" encoding="GB2312"?>
<Params>
<FileOperate>
<Setting>
<Type>0</Type>
<SavePath>C:/U_0127</SavePath>
</Setting>
<History>
<Path>C:/U_0127/Demo000002.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000362.csv</Path>
<Path>C:/U_0127/Demo000361.csv</Path>
</History>
</FileOperate>
</Params>
-----------------我是华丽的分割线--------------
一个完整的删除结点操作就这样完成了。
- delphi实现删除XML结点
- C#删除XML结点的简单例子
- Delphi实现自我删除
- Delphi 实现自删除
- 单链表结点删除 C语言实现
- 删除链表中重复的结点java实现
- XML文件操作(查询,添加,修改,删除 结点)
- 实验二 删除奇数结点的链表-----程序实现
- 用Java语言实现二叉树删除结点
- C语言实现单链表节点的删除(带头结点)
- 链表:删除链表中重复的结点(java实现)
- 单链表插入和删除结点c语言的实现
- 删除文件和目录(Delphi实现)
- 单链表的实现(给定某结点,删除它;给定某结点,在他前面插入一个结点等)
- 用结构体实现链表的创建、遍历、结点插入、结点删除
- 【Java】实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
- C语言实现非循环双链表节点的删除(带头结点尾结点)
- 利用VC++实现对XML结点的更新和追加
- gdb android
- 标准USB/Mini-USB接口,及OTG
- CSS选择器
- win7下使用telnet的方法
- android Content Provider
- delphi实现删除XML结点
- 3.1 Shaping Regions 漂浮法
- SNMP用VC++6.0实现的方法
- 学习 C/C++的好的书籍
- 设计模式-创建型模式-生成器
- android开发我的新浪微博客户端-载入页面UI篇(1.1)
- android开发我的新浪微博客户端-载入页面sqlite篇(1.2)
- 四则表达式实现(dev cpp工具中运行通过,欢迎指正)
- Linux关机命令详解