No.1: 创建一个Document对象:首先们应该知道,要对XML进行操作的话,那么必须包含以
下几个单元xmldom, XMLIntf, msxmldom, XMLDoc,而这里所说的DOM的接口,很大一部分在
XMLDom里充分的展现给用户。创建一个Document: 我们只需要将Internet中的
TXMLDocument控件放到应用程序中就可以了,
如它的声明部分:XMLDoc: TXMLDocument;No
.2: 加载XML 加载XML很简单,
如下:XMLDoc.LoadFromFile('MyBooks.XML');当XML文件加载之后,
那么就会形成如上图所示的一个DOM树,我们对其所操作实际上就是对这个DOM树进行所有
的操作。No.3: 遍历XML文档首先,我们要获取XML文档的根元素节点,用Delphi描述这个
操作如下: var Root ,iRoot,jRoot,Root_ : IXMLNode;
…begin
Root := XMLDoc.DocumentElement;…end;
现在,我们已经得到了文档的根元素节点,对于其他元素,
我们如何获得对它的访问呢?以文档中的各个book元素为例,
对每个元素节点以及其子节点的访问可以通过下面的方式来实现。
For Index_ := 0 to Root.ChildNodes.Count - 1do
begin
jRoot := Root.ChildNodes[Index_];…. end;
所以,我们就可以通过循环来进行访问。记住,我们通过上边的语句仅仅是对其节点进行
访问(或者是对像,其实对象正确。),那们我们如何才能得到如第一个节点的值
:Mastering Delphi5这个值呢?如下:
Root := XMLDoc.DocumentElement;
jRoot := Root.ChildNodes[0];IRoot := jRoot.ChildNodes[0];
Stringvalue := iRoot. Nodevalue;请记住,
我们这儿用的是iRoot.Nodevalue从而得到的值是 Mastering Delphi5,那么如果我们用
iRoot.NodeText呢?将得到的是 Title;这也是NodeText和Nodevalue之间的差别,同时,
我们应该知道,这儿可能和VB有些不太一样。 在上面的代码中,root是文档的根元素
节点books节点,jRoot和iRoot都是元素类型的节点, iRoot. Nodevalue是一个字符串。
childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性,通过item可以
访问NodeList节点集合中的任意节点 上面的例子给出了如何访问DOM树中的元素节点;完
整的代码如下:procedure TForm1.Button2Click(Sender: TObject);
//触发事件var Root ,iRoot,jRoot,Root_ : IXMLNode;
TENode , TiNode,TjNode :
TTreeNode;
Index , Index_ , IndexV : Integer;
begin
TreeView1.Items.Clear;
Root := XMLDoc.DocumentElement;
TENode := TTreeNode.Create(Nil);
TjNode := TreeView1.Items.Add(Nil,Root.NodeName);
For Index_ := 0 to Root.ChildNodes.Count - 1do
begin
jRoot := Root.ChildNodes[Index_];
if jRoot.HasChildNodes then
begin
TENode := TreeView1.Items.AddChild(TjNode,Root.ChildNodes[Index_].NodeName);
if BeXMLNode(jRoot) then
XMLCNode_BL(jRoot,TENode);
end;
end;
end;
Function TForm1.XMLCNode_BL(XNodevalue : IXMLNode;TNodevalue : TTreeNode) :
IXMLNode;
var Index : Integer;
Node : TTreeNode;
begin
Node := TTreeNode.Create(Nil);
if XNodevalue.HasChildNodes then
begin
For Index := 0 to XNodevalue.ChildNodes.Count - 1do
begin
Node := TNodevalue;
TreeView1.Items.AddChild(Node,XNodevalue.ChildNodes[Index].Nodevalue);
end;
end;
end;
function TForm1.BeXMLNode(Nodevalue: IXMLNode): Boolean;
begin
Result := False;
if Nodevalue.HasChildNodes then
Result := True;
end;