求DELPHI+DOM的资料和代码,分可再加!

pursuer 2002-08-26 11:26:36
介绍一下DOM也可给分
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanwangzhiwang 2002-08-28
  • 打赏
  • 举报
回复
其实我做过的dom方面的例子比上面的例子要复杂的多,但是由于里面有很多其他的东西,估计大家看起来会很困难,就没贴那么多!

如果谁想和我交流就加我的qq吧!
wanwangzhiwang 2002-08-28
  • 打赏
  • 举报
回复
这是读:
entpcode:string;
xpnode:IxmldomNode;
xnode:ixmldomnode;
anode:tTreenode;
begin
entpcode:=node.Stringdata;
xpnode:=EntpDoc.documentElement.selectSingleNode('//entp[@entpcode="'+entpcode+'"]');
if (xpnode<>nil)and(xpnode.hasChildNodes)then
begin
xnode:=xpnode.firstChild;
anode:=treeview.Items.AddChild(node,xnode.attributes.item[1].text);
anode.StringData:=xnode.attributes.item[0].text;
anode.HasChildren:=true;
while xnode.Get_nextSibling<>nil do
begin
xnode:=xnode.nextSibling;
anode:=treeview.Items.AddChild(node,xnode.attributes.item[1].text);
anode.StringData:=xnode.attributes.item[0].text;
end;
end;
这是写:
var
xElem:IxmlDomElement;
xNode:IxmlDomNode;
ResultStr:string;
Node:tfcTreenode;
begin
xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');
xElem:=entpdoc.createElement('entp');
xElem.setAttribute('entpcode',E_eID.text);
xElem.setAttribute('entpname',E_eName.text);
xElem.setAttribute('entplevel','');
xElem.setAttribute('xzqh',E_Xzqh.Text);
xElem.setAttribute('entptype',copy(CBB_EntpType.Text,1,1));
//showmessage(xDoc.documentElement.xml);
xnode.parentnode.insertBefore(xElem,xNode);
//entpdoc.documentElement.insertBefore(xElem,xNode);
entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');
Node:=fcTV_Entp.Selected;
Node:=fcTV_Entp.Items.Insert(Node,E_eName.text);
这是修改:
var
ResultStr:string;
xNode:IxmlDomNode;
xdoc:IxmlDomDocument;
begin
Fselnode:=fcTV_Entp.Selected;
xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');

xNode.attributes.item[0].text:=E_eid.Text;
xNode.attributes.item[1].text:=E_eName.Text;
xNode.attributes.item[3].text:=E_xzqh.Text;
xNode.attributes.item[4].text:=copy(CBB_EntpType.Text,1,1);
entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');

FselNode.Text:=e_ename.Text;

这是删除:
xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');
xParentNode:=xNode.parentNode;
if xNode.hasChildNodes then
begin
if messagedlg('要删除节点:"'+fcTV_Entp.Selected.Text+'"及其子节点吗?',mtinformation,[mbyes,mbno],0)=mryes then
begin
xParentNode.removeChild(xnode);
fcTV_Entp.Selected.Delete;
end
else exit;
end
else if messagedlg('要删除节点:"'+fcTV_Entp.Selected.Text+'"吗?',mtinformation,[mbyes,mbno],0)=mryes then
begin
xParentNode.removeChild(xnode);
fcTV_Entp.Selected.Delete;
end
else exit;
entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');

有看不懂的地方请问!
蝈蝈太阳 2002-08-27
  • 打赏
  • 举报
回复
ft,UP。
wanwangzhiwang 2002-08-26
  • 打赏
  • 举报
回复
具体的DOM组件技术建议你看看这个吧,如果有什么问题,找我qq33291349

http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39035190,00.htm
free007 2002-08-26
  • 打赏
  • 举报
回复
《DELPHI COM 深入编程》机械工业出版社 作者:ENRIC
wanwangzhiwang 2002-08-26
  • 打赏
  • 举报
回复
不知道你的delphi安装了dom组件没有,如果没有,下载一个MSXML3.0,安装一下就行了

这组组件跟delphi其他的组件用法一样

以下是我做过的例子
var
xNode:IxmlDomNode;
xNodelist:IxmlDomNodelist;
Doc:IxmlDomDocument;
DOMDocEntp: TDOMDocument30;
fc_entp:ttreeview;
anode:ttreenode;


EntpDoc:=DomdocEntp.DefaultInterface;
EntpDoc.async:=False;
Entpdoc.load(Extractfilepath(application.exename)+'\res\file.sys');
try
xNode:=entpdoc.documentElement.selectSingleNode('/entp');
except
messagedlg('未发现单位列表!',mterror,[mbyes],0);
exit;
end;
if xnode<>nil then
begin
anode:=fc_entp.Items.Add(nil,xnode.Attributes.item[1].text);

anode.HasChildren:=True;
anode.Expand(false);
end;
wanwangzhiwang 2002-08-26
  • 打赏
  • 举报
回复
1. DOM的来由
为什么要定义这样一个接口呢?这样讲吧,我们知道数据库有标准的ODBC/JDBC这样的接口规范,那么我们使用XML数据如果没有一个统一的接口,我们写程序是不是要每个人都要自己去处理XML的语法细节,如果我们手头有XML的语法分析器(有人译为解析器),它也必然有一个接口让我们通过它访问XML数据,所有语法分析器的接口如果都不相同,我们开发就必须针对某一个分析器,如果换了分析器,程序就必须重写。到这里,又和数据库有可比性了,我们编数据库应用可以不管后面的数据库系统究竟是ORACLE还是SYBASE,或INFORMIX,是因为有了ODBC,所以要是我们做XML应用开发,就应该有一个统一的XML数据接口,这个接口就是DOM。


2. DOM的三部分
目前的DOM分为 核心(core)、HTML、XML三部分。

核心:

这部分是结构化文档比较底层的对象的集合,但他们就已经可以表达出任何HTML和XML文件了。

HTML和XML

这两部分是专为XML和HTML提供的另外的高级接口,使操纵者两类文件更方便。98年的只有HTML部分。


3.DOM组成

这里有DOM的一个整体的图,可以使大家有一个DOM模型基本组成的概念。。


4 文件树

DOM中的最基本对象应该就是Node了。从它又派生出许多类型的node。所有这些node组成一棵文件树,它包含了XML或 HTML文档的几乎全部信息。

在结构化文档中,信息是按层次化的树形结构组织的。所以结构化文档的模型的组织也必然是树形的。

如一本书的组成是

书----标题
|
---正文---第一章-----第一节---段
|
--第二章 .....

Node简单的说,就是上面树形结构中的节点,但对XML来说还包括其他XML语法相关的节点,包括XML声明,文件类型声明,处理指令等等。

Node提供一些基本属性和操作,各种类型的Node则继承Node的属性和操作,同时有各自特殊的属性和操作。比如ElementNode


5 基本对象

上面已经讲了DOM中最基本的对象就是节点,它的接口定义如下:

从NODE派生出的几个比较重要的节点类型有Document Element, Attribute,Text:

Document是DOM树的根,它代表一个完整的XML文档。它会有一些自己的子节点,至少应该有一个文档元素的子节点,这个节点类型为Element,是XML文件最外层的根元素,此外他还可能有DocumentType(唯一),ProcessingInstruction,Comment这几种作为子节点。

Element代表XML元素,是最常用的节点,它可以组成以它为根的DOM的子树。他还可以有Element子节点,以及Attribut,Text,ProcessingInstruction,CDATASection,Comment子节点。

Attribute是XML元素的属性,它的父节点必然是Element,它的子节点有Text和EntityReference。

除了Node,DOM里还有两个比较重要的对象:

NodeList它实现的一个节点的序列,用于表示有顺序关系的一组节点,比如某个节点的孩子节点序列,它还出现在一些方法的返回值中,例如GetNodeByName。

NamedNodeMap它表示的是一组节点和其唯一的名字的对应关系,这个对象主要用在属性节点的表示上。


6 DOM的版本

目前的DOM level one是W3C1998年8月18日通过的,现在w3c正在进行DOM2的制定。

DOM2我们将在以后的文章中介绍。


7 编程

DOM 的具体使用和编程不是很难,现在DOM的实现主要是以部件的形式提供比如MSXML,和JAVA实现比如XML4J。这两种实现,对我们使用它的接口来说,大同小异,但许多实现都加了自己的扩展的接口,这也是我们选择时考虑比较多的。
wanwangzhiwang 2002-08-26
  • 打赏
  • 举报
回复
DOM是对XML开发者相当重要的,对于XML应用开发来说就是一个对象化的XML数据接口。最基本的XML开发通常都要使用它。简单说,DOM就是一组对象的集合,通过操纵这些对象,我们就能操纵XML和HTML数据。

DOM全称是Document Object Model,人如其名,DOM就是一个文档对象组成的模型,它不光用于XML,最先是起于HTML的。对作过Web开发的人,特别是写过动态DHTML的人,应该对HTML中的文档对象有一定概念,DOM就是这样一个对象模型的标准。

DOM另外又是一个接口,一个与语言无关的接口,应用通过这个接口来和XML或HTML内的数据打交道。无论是在浏览器里,还是在浏览器外,在服务器上,还是客户端,我们只要用XML就会碰到DOM。





wanwangzhiwang 2002-08-26
  • 打赏
  • 举报
回复
faint!各位老兄看清楚人家要得是dom,而不是com
星空朗朗 2002-08-26
  • 打赏
  • 举报
回复
《Delphi 5.X ADO_MTS_COM+高级程序设计篇》配源代码下载:
http://202.96.70.229/cakk/delphi/
9igogo 2002-08-26
  • 打赏
  • 举报
回复
mark and up

5,388

社区成员

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

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