//获取内容: //1、根节点名称 //2、各节点所包含条目数 //3、各节点所包含的条目名称和值 //4、判断节点所包含的属性以及各属性名称和值 //5、判断节点类型:是否有子节点、是否是文本元素、是否为空等 procedure TForm1.Button9Click(Sender: TObject); begin XMLDocument1.FileName := 'c:/temp/test.xml'; XMLDocument1.Active := True; with Memo1.Lines do begin Add('XML版本:' + XMLDocument1.Version); //获取使用的XML版本号 Add('XML编码:' + XMLDocument1.Encoding); //获取编码方式 Add(XMLDocument1.ChildNodes[0].Text); //返回XML设置信息,即XML第一行 Add('文件存放路径' + XMLDocument1.FileName); Add(''); //获取 根节点名称 Add('根节点名称:' + XMLDocument1.DocumentElement.LocalName); //DocumentElement XML文档元素,要取各条目必须用它 Add('共有记录:' + IntToStr(XMLDocument1.DocumentElement.ChildNodes.Count)); Add(''); Add('获取节点相关信息:'); Add('第一个节点名称:' + XMLDocument1.DocumentElement.ChildNodes[0].LocalName); //节点属性 Add('第一个节点所含属性数:' + IntToStr(XMLDocument1.DocumentElement.ChildNodes[0].AttributeNodes.Count)); Add(' 第1个属性名称:' + XMLDocument1.DocumentElement.ChildNodes[0].AttributeNodes[0].LocalName); Add(' 第1个属性值 :' + XMLDocument1.DocumentElement.ChildNodes[0].AttributeNodes[0].NodeValue); Add(' 第2个属性名称:' + XMLDocument1.DocumentElement.ChildNodes[0].AttributeNodes[1].LocalName); Add(' 第2个属性值 :' + XMLDocument1.DocumentElement.ChildNodes[0].AttributeNodes[1].NodeValue); //获取条目信息 Add('第一个节点所含条目数:' + IntToStr(XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes.Count)); Add(' 第1个条目名称 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0].LocalName); Add(' 第1个条目值 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0].NodeValue); Add(' 第2个条目名称 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[1].LocalName); Add(' 第2个条目值 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[1].NodeValue); Add(' 第3个条目名称 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[2].LocalName); Add(' 第3个条目值 :' + XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[2].NodeValue); end; { XML版本:1.0 XML编码:gb2312 version="1.0" encoding="gb2312" 文件存放路径c:/temp/test.xml 根节点名称:科室人员名单 共有记录:3 获取节点相关信息: 第一个节点名称:人员 第一个节点所含属性数:2 第1个属性名称:职务 第1个属性值 :科长 第2个属性名称:说明 第2个属性值 :正级 第一个节点所含条目数:3 第1个条目名称 :姓名 第1个条目值 :hehf 第2个条目名称 :性别 第2个条目值 :man 第3个条目名称 :年龄 第3个条目值 :32 } { 如: <人员 职务="科长" 说明="正级"> <姓名>hehf</姓名> <性别>man</性别> <年龄>32</年龄> </人员> <人员>:为根节点 下面的 <姓名>、<性别>、<年龄>为组成这个节点的条目,也就是 <人员>下面的子节点 1、IsTextElement:对条目进行判断 2、判断是否为空节点:不再包含子条目的条目 3、比如对<姓名>、<性别>、<年龄>这三个条目,虽说没有子节点了,但通过HasChildNodes判断 还可以向下取一级 } procedure TForm1.Button6Click(Sender: TObject); var Node: IXMLNode; I : Integer; begin XMLDocument1.LoadFromFile('c:/temp/test.xml'); //获取指定的结点 Node := XMLDocument1.DocumentElement.ChildNodes[0]; if Node.HasChildNodes then begin Memo1.Lines.Add('共有条目:' + IntToStr(Node.ChildNodes.Count)); //显示条目信息 for I := 0 to Node.ChildNodes.Count - 1 do Memo1.Lines.Add(Node.ChildNodes[I].LocalName + ': ' + Node.ChildNodes[I].Text); end; //取指定节点下的下一级节点 Node := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0]; if Node.IsTextElement then Memo1.Lines.Add(Node.LocalName + ': 是文本元素') else Memo1.Lines.Add(Node.LocalName + ': 不是文本元素'); //取指定节点下的下一级节点 //引时节点名称也不存在 //Node可以指向条目的下一级作判断,此时Node的名称将为空,不能继续向下一级再取Node了 if Node.HasChildNodes then //如果不是空节点就继续向下取 注:到单独条目时默认还能取下一级 begin Node := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0].ChildNodes[0]; if Node.HasChildNodes then //如果不是空节点就继续向下取 begin if not Node.HasChildNodes then Memo1.Lines.Add(Node.LocalName + ': Third Node IsTextElement') else Memo1.Lines.Add(Node.LocalName + ': Third Node is not TextElement'); end; end; end; { 共有条目:3 姓名: hehf 性别: man 年龄: 32 姓名: 是文本元素 }