unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MSXML_TLB,Comobj, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
tvXML: TTreeView;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure tvXMLClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//创建
procedure TForm1.Button1Click(Sender: TObject);
var
doc : IXMLDOMDocument;
root,{child1,child2,}childtmp : IXMLDomElement;
//XMLAtri : IXMLDOMAttribute;
procedure addSysNode(pElement : IXMLDomElement;iDepth : Integer);
var
child1 : IXMLDomElement;
i : Integer;
begin
child1 := doc.createElement('SysNode'+inttostr(iDepth));
child1.setAttribute('Vol','102');
child1.setAttribute('Option','2');
child1.setAttribute('ConnectID','1');
child1.setAttribute('No','0');
child1.setAttribute('Num','-1');
pElement.appendChild(child1);
if iDepth = 5 then
begin
exit;
end;
addSysNode(child1,iDepth+1);
end;
begin
doc := CreateOLEObject('Microsoft.XMLDOM') as IXMLDomDocument;
root := doc.CreateElement('Site');
root.setAttribute('type','7');
doc.AppendChild(root);
childtmp := doc.CreateElement('SystemNode1');
childtmp.setAttribute('Option','2');
childtmp.setAttribute('ConnectID','1');
childtmp.setAttribute('No','0');
childtmp.setAttribute('Num','63');
root.AppendChild(childtmp);
childtmp := doc.CreateElement('SystemNode2');
childtmp.setAttribute('Option','2');
childtmp.setAttribute('ConnectID','1');
childtmp.setAttribute('No','0');
childtmp.setAttribute('Num','63');
root.AppendChild(childtmp);
childtmp := doc.createElement('SystemNode');
childtmp.setAttribute('Vol','102');
childtmp.setAttribute('Option','2');
childtmp.setAttribute('ConnectID','1');
childtmp.setAttribute('No','0');
childtmp.setAttribute('Num','-1');
root.AppendChild(childtmp);
addSysNode(childtmp,0);
doc.save('e:/xmltest.xml');
end;
//解析
procedure TForm1.Button2Click(Sender: TObject);
var
//i : integer;
doc : IXMLDOMDocument;
root : IXMLDOMNode;
tvRoot,curtvNode : TTreeNode;
TreeNodeList : TList;
atriArray : array[1..6] of String; //属性列表数组
{
**根据传入的属性名获取属性值
}
function getAtri(pNode : IXMLDOMNODE; atriName,atrOption : String):string;
var
tmpAtri1 : IXMLDOMNode;
begin
tmpAtri1 := pNode.attributes.getNamedItem(atriName);
if tmpAtri1 <> nil then
begin
if atrOption = '' then
begin
atrOption := tmpAtri1.nodeName+'='+tmpAtri1.nodeValue;
end
else
begin
atrOption := atrOption+','+tmpAtri1.nodeName+'='+tmpAtri1.nodeValue;
end;
end;
result := atrOption;
end;
{
**递归获取层次节点
}
procedure addNode(pNode : IXMLDOMNode;ptvNode : TTreeNode);
var
i : Integer;
tmpRoot,childtmp : IXMLDOMNode;
bBrother : Boolean;
atrOption : String;
begin
bBrother := False;
while(pNode <> nil) do
begin
atrOption := '';
for i := 1 to 6 do
begin
atrOption := getAtri(pNode,atriArray[i],atrOption);
end;
if not bBrother then
begin
ptvNode := tvXML.Items.AddChild(ptvNode,pNode.nodeName+'('+atrOption+')'); //父子节点
end
else
begin
ptvNode := tvXML.Items.Add(ptvNode,pNode.nodeName+'('+atrOption+')'); //兄弟节点
end;
if pNode.childNodes.length > 0 then
begin
childtmp := pNode.childNodes.item[0];
addNode(childtmp,ptvNode);
//ptvNode := TreeNodeList.
end;
pNode := pNode.nextSibling;
bBrother := True;
end;
end;
begin
doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
doc.load('E:/xmltest.xml');
//属性名
atriArray[1] := 'type';
atriArray[2] := 'Vol';
atriArray[3] := 'Option';
atriArray[4] := 'ConnectID';
atriArray[5] := 'No';
atriArray[6] := 'Num';
root := doc.firstChild;
addNode(root,nil);
end;
procedure TForm1.tvXMLClick(Sender: TObject);
var
tvNode : TTreeNode;
begin
tvNode := tvXML.Selected;
if tvNode.Text = '2' then
exit;
end;
end.
分享到:
相关推荐
delphi 使用nativeXML创建和解析xml文件
Android 3.0 平台上创建和解析 XML
JDOM创建和解析XML完整案例; 案例作者:宋海康
delphi 使用nativeXML创建和解析xml文件.zip
NULL 博文链接:https://feargod.iteye.com/blog/1168188
在本文中,您可以学习如何在Android设备上创建和解析XML文档。要输出XML,您可以使用标准的javax.xml.transform.Transformer类。要在Android上解析XML,您可以使用DOM与SAX解析器。org.xmlpull.v1.XmlPullParserpull...
Jdom操作、创建和解析XML Jdom操作、创建和解析XML Jdom操作、创建和解析XML
DOM解析XML 创建XML
Android 创建与解析XML Sax方式
Android 创建与解析XML Dom4j方式
Ubuntu下C语言使用libxml2库创建、解析xml文件,包括对节点的增、删、改、查等
主要介绍了Ruby程序中创建和解析XML文件的方法,创建用builder库,解析用ReXML库,需要的朋友可以参考下
下面小编就为大家带来一篇dom4j创建和解析xml文档的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用 dom4j 解析 XML;dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。
用微软的xml解析器编写的类,用于现实XML文档的创建和解析
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
Android创建与解析XML(二).pdf
通过实例与步骤解析说明,能过帮助各位同仁快速掌握dom4j创建与解析xml文档,除此之外,文档还包含了创建与解析xml文档过程中可能出现的异常解决办法、xpath知识与应用和xml元素属性关系示意图,相当不错哦
Android 创建与解析XML Pull方式 博客原文:http://blog.csdn.net/sunboy_2050/article/details/7521601