XMLDocument中如何在指定位置插入子节点啊?

fonganzen 2011-04-21 12:20:31
var newNode1:IXMLNode;
newNode1:= nodeList1.FindNode('b');

xml大概如下
<a
<property ></property>
<property ></property>
</a>
<c
<property ></property>
<property ></property>
</c>
如何才能将newNode1中的
<b
<property ></property>
<property ></property>
</b>
插入在节点c前得到以下xml呢,谢谢解答!
<a
<property ></property>
<property ></property>
</a>
<b
<property ></property>
<property ></property>
</b>
<c
<property ></property>
<property ></property>
</c>

...全文
332 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
funxu 2011-04-21
  • 打赏
  • 举报
回复
给你贴段代码,看下就明白了
uses msxml,XMLIntf,XMLDoc;

(1)//从文件存取

function writeXML(XMLName,nodeName,nodeValue: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); //***** 创建TXMLDocument *****

xmlDoc.Active := True; iReturn:=-1;

try

try

xmlDoc.LoadFromFile(XMLName) ; //***** 载入XML文件 *****

xmlDoc.Version := '1.0';

xmlDoc.Encoding :='GB2312';

rootNode := xmlDoc.ChildNodes.FindNode('Document'); //***** 查找结点 *****

CNode := rootNode.ChildNodes.FindNode('product');

if CNode<>nil then

begin

// iValue := CNode.GetNodeValue; //***** 取结点值 *****

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 then //某 没找到 ****

begin

CNode:=rootNode.AddChild('product'); //***** 添加一个结点 *****

CNode.SetAttribute('proID', proID); // ***** 写结点属性 *****

end;

CNode.SetAttribute('uninstall', 'false');

NNode := CNode.ChildNodes.FindNode(nodeName);

if NNode=nil then

NNode:=CNode.AddChild(nodeName);

NNode.SetNodeValue(nodeValue) ; // ***** 写结点值 *****

xmlDoc.SaveToFile(XMLName) ;

except

iReturn:=-1;

end;

finally

xmlDoc := nil ; //***** 释放TXMLDocument *****

result := iReturn;

end;

end;

(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 then rootNode.ChildNodes.Remove(CNode); //找到 ,删除

xmlDoc.SaveToFile(XMLName) ;

iReturn := 0;

except

iReturn:=-1;

end;

finally

xmlDoc := nil ;

result := iReturn;

end;

end;
浩南_哥 2011-04-21
  • 打赏
  • 举报
回复
Insert(Index: Integer; const Node:IXMLNode)
fonganzen 2011-04-21
  • 打赏
  • 举报
回复
多谢啦!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧