简单分析TXMLDocument内部结构

Delphi中动态调用TXMLDocument的经历 var  vXMLDocument: TXMLDocument;begin  vXMLDocument := TXMLDocument.Create(c:/temp/temp.xml);  Caption := IntToStr(vXMLDocument.Node.ChildNodes.Count);  vXMLDocument.Free;end; 执行上面的代码跳出"Invalid 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 第一次对TXMLDocument感兴趣,也是第一次使用TXMLDocument的时候,当时,我在修改一个软件,只是想加一点功能,由于时间不多,我决定先做一个接口,再慢慢扩充,但如何使接口扩充性能好,能与各种工具混合,于是我想到了java用XML做配置的方法,语法很多想法来自C++,架构多来自java(上面哪部分想法也是抄自Java,哈哈),实现当然是用Delphi了,于是写了一个配置文件,发现TXMLDocument怎样也没法把数据读出来,检查了一天XML文件,未果,最后改了一下DOMVendor属性,改成OpenXML竟然通过了。现在我决定重走我的旧迹,以DOMVendor做切入点,开始简单分析一下TXMLDocument,正确选择切入点很重要,要不会浪费很多时间,有时这真要靠点运气./r/n/r/n 当点DOMVendor属性,它像是一个枚举属性,但在TXMLDocument定义为类TDOMVendor;这时候当然是想到要找DefineProperties,从DefineProperties追到 ReadDOMVendor,终于找到真正的入口GetDOMVendor(DOMVendorDesc)./r/n/r/n 下面正式介绍它的结构。/r/n/r/n TXMLDocument内部分为两层,一层是IDOM*****,一层是IXML******,IXML是供用户使用的接口,IDOM***应该是以DOM做为模型定义的接口,供IXML使用,IDOM下面有各种具体实现手段,这是一个典型的Bridge模式,我把图画出来,大家可以与(<设计模式> GoF 中文版)101页哪个图对照一下。/r/n/r/n/r/n当我们使用IXML***接口时,它将会使用IDOM去完成操作。/r/n/r/n在这里IDOMDocument是继承IDOMNode的,但IXMLDocument却没有,似乎也不太必要,因为内部主要使用IDOM接口,如果要IDOMNode,可以用IDOMDocument去转换,其实根本用不到。/r/n/r/n这么多实现,到底要怎样才能准确并且优美地创建对应的实例,在TXMLDocument内部使用了Abstract Factory模式,参照下图/r/n/r/nAbstract Factory希望不用指定具体的类,但为了找到它们,在TXMLDocument是通过指定一个字符串,也就是我们点击DOMVendor时出现的哪几个字符串.现在回到开始,再来看看切入点/r/n/r/nDOMVendor := GetDOMVendor(DOMVendorDesc);/r/n/r/n最后取得一个IDOMImplementation,它有一个createDocument(….):IDOMDocument;函数,这个函数将返回一个IDOMDocument;接口让IXMLDoucment使用。/r/n/r/n在如果使用MSXML,接口对应的是TMSDOMDocument,TMSDOMDocument是实际上是调用MSXML技术,下面是调用MS COM的代码/r/n/r/nfunction CreateDOMDocument: IXMLDOMDocument;/r/n/r/nbegin/r/n/r/n Result := TryObjectCreate([CLASS_DOMDocument40, CLASS_DOMDocument30,/r/n/r/n CLASS_DOMDocument26, msxml.CLASS_DOMDocument]) as IXMLDOMDocument;/r/n/r/n if not Assigned(Result) then/r/n/r/n raise DOMException.Create(SMSDOMNotInstalled);/r/n/r/nend;/r/n/r/n /r/n/r/n CLASS_DOMDocument26: TGUID = /'{F5078F1B-C551-11D3-89B9-0000F81FE221}/';/r/n/r/n CLASS_DOMDocument30: TGUID = /'{F5078F32-C551-11D3-89B9-0000F81FE221}/';/r/n/r/n CLASS_DOMDocument40: TGUID = /'{88D969C0-F192-11D4-A65F-0040963251E5}/';/r/n/r/n而OpenXML却使用了另一种方法/r/n/r/n它不知怎样又搞出一个TDomImplementation,里面又有一个createDocument,总之哪里代码多多,没精力看了。/r/n/r/n还有哪个TXercesDOMImplementationFactory,好像是Linux下用了,却代码少少,一眼看完/r/n/r/n InitLibrary;/r/n/r/n GetDOMProc := GetProcAddress(FLibHandle, SGetDOMImpl);/r/n/r/n GetDOMProc(Result);/r/n/r/n跑到动态连接库中去了,省得我浪费时间。/r/n/r/n/r/n
动态创建TXMLDocument--使用IXMLDocument接口 var XML : TXMLDocument; DocIntf : IXMLDocument; begin XML := TXMLDocument.Create(nil); DocIntf := XML; //防止接口被自动释放,少了这一句会发生AV 无宿主时一定要加后面这一句。 不过一般不要这样做为好,先来看看delphi中关于XML文档的几个单元。 ·XML 阅读详情

相关推荐

Delphi中TXMLDocument控件的用法

Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面。 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解。

Delphi 中的 XMLDocument 类详解(2) - 记要

1、TXMLDocument 适用于内存中操作和建立新的 xml 2、一个 TXMLDocument 文档其实就是一个节点集合 3、每个节点包括名称、文本内容、属性集合、子节点集合 4、可以按位置或名称访问节点 5、每一个节点都是一个 IXMLNode 对象 6、每一个节点下包含的节点集合是一个 IXMLNodeList 对象, 用节点的 ChildNodes 属性获取 7、根节点...

weixin_33976072的博客 284

ASP.NET XmlDocument类详解

XmlDocument类是.NET框架的DOC解析器。XmlDocument将XML视为树状结构,它装载XML文档,并在内存中构建该文档的树状结构。下面来看下XmlDocument提供了哪些功能。 一、属性: Attributes      获取一个 XmlAttributeCollection,它包含该节点的属性。 (继承自 XmlNode。) BaseURI          获取当前节点的基 URI。 (重写 XmlNode..::.BaseURI。) ChildNodes      获取节点的所有子节点。 (继承自 XmlNode。) DocumentElement   获取文档

Delphi中使用TXMLDocument对XML文件操作

在Delphi中,可以使用TXMLDocument组件来对XML文件进行操作。TXMLDocument是Delphi提供的用于处理XML文件的组件。以上是TXMLDocument在Delphi中对XML文件的基本操作。通过使用TXMLDocument,可以轻松地读取、创建和修改XML文件的内容。

PleaseGo的博客 1587

海量数据 / Vastbase 深度研究笔记 v3.1

v3.1 重点修订:在 v3.0 审慎版基础上,新增“2026 新变量”章节,纳入 7 亿级定增、HTAP / 多模态时序数据库、G100 V3.0 Build 8 的 3CM+2DN 高可用补强、pgvector / V100 / AI 多模叙事,以及集成服务基因与标准软件 ARR 的拉扯。核心关注点是:Vastbase 能否把 openGauss 生态红利、数据库产品矩阵和行业交付能力,转化为可持续、可复购、低边际成本的标准软件收入。海量不是没有业务基本盘,也不是马上失血致死;客户越多,服务债越大。

喝醉酒的小白 578

CMU开源NavRL:深度强化学习如何破解无人机动态避障难题?

卡内基梅隆大学(CMU)开源了NavRL框架,利用深度强化学习解决无人机在复杂环境中的动态避障难题。该框架通过创新的状态表示、多目标奖励函数设计以及独立的安全屏障机制,使无人机能够通过仿真训练自主学会灵活、安全的导航策略,并成功实现从仿真到真实环境的零样本迁移。

hope8的博客 721

TXMLDocument 的使用

TXMLDocument 的使用 TXMLDocument是DELPHI自带的操作XML的类。 需要它,需要引用单元: usesXMLDoc; var XMLDoc:TXMLDocument; XMLNode: IXMLNode; child: IXMLNode; begin CoInitialize(nil); //初始化ActiveX XMLDoc:=TXMLDocum...

weixin_30267697的博客 888

别再死记硬背了!用Python可视化带你直观理解柯西收敛定理(附NumPy代码)

本文通过Python可视化技术,结合NumPy和Matplotlib,直观展示柯西收敛定理的动态过程。文章提供了完整的代码实现,帮助读者从抽象数学定义过渡到具象理解,特别适合数学学习者和Python开发者。通过热力图和交互式参数探索,读者可以清晰观察数列收敛特性,提升数学分析的学习效率。

weixin_28465009的博客 186

TXMLDocument对XML文件进行读取和写入

var XML : TXMLDocument; Node1 : IXMLNode; DocIntf : IXMLDocument; begin XML := TXMLDocument.Create(nil); DocIntf := XML; //防止接口被自动释放,少了这一句会发生AV try XML.LoadFromStream(Strem); XML.Active := True; { 读ReportObject属性 } Node1 := XML.DocumentElement.ChildNodes.F

天道酬勤 2860

基于51单片机的简易计算器设计(原理图+仿真+源代码+参考论文)

本设计以51单片机为核心,矩阵键盘输入数字,通过1602显示屏显示计算结果,能够实现整数的加、减、乘、除四则运算,具备清除功能。

u012759563的博客 7707

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

TXMLDocument控件的用法 (bcb)

Delphi中TXMLDocument控件的用法 Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面。在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解。1 2 3 4 5  6 78  9 Hello! I am yaya! 10 11TXMLDoc

NewLand 3863

从开发到生产:Power APP 的应用和编程实践

一旦您在开发环境中完成了应用程序的开发、调试和测试,就可以将其部署到生产环境中供用户使用。在 Power APP Studio 中,您可以选择将应用程序发布到 Power APP 网关或将其嵌入到其他应用程序中。使用 Power APP Studio 内置的调试工具,您可以逐步执行应用程序并查看变量的值,以确保逻辑的正确性。在上述代码中,我们通过将两个文本输入框(TextInput1 和 TextInput2)中的文本转换为数字,并将它们相加,将结果存储在 Result 变量中。

2301_79326510的博客 1504

简单分析TXMLDocument内部结构 (转)

简单分析TXMLDocument内部结构 (转)[@more@] 第一次对TXMLDocument感兴趣,也是第一次使用TXMLDocument的时候,当时,我在修改一个软件,只是想加一点功能,由于时间不多,我决定先做一个接口,...

csd3176的博客 101

实现端到端加密的WebRTC视频会议终端

需要注意的是,上述示例代码中没有涉及到具体的加密算法和密钥交换过程,而是通过WebRTC API自动处理了加密和密钥交换的细节。然后,我们通过信令服务器将本地SDP发送给对方,并接收对方的SDP。最后,我们将对方的SDP设置为远程描述,并将最终的连接建立起来。最后,我们将对方的SDP设置为远程描述,并建立最终的连接。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。

WaJulia的博客 434

MCAL中Dsadc的配置

DSADC模块作为一个专用的模块,主要应用在编码器软解码,功能强大而复杂,这里介绍了Dsadc的mcal配置和详细描述,让你全面学习和理解这个模块功能和应用。

dhyw12399999的博客 788

delphi中的XML解析控件TXMLDocument的用法

Delphi中TXMLDocument控件的用法   Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面。   在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解。1 文档版本信息, 注释格式同HTML-->2   3  100.90” handler=”si” unit=”江苏网商软件”/>4

dainiao01的专栏 1451

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

TXMLDocument类:Delphi7的XML利器

Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写。可以利用TXMLDocument把XML文档读到内存中,从而可以进行编辑、保存操作。TXMLDocument类是通过DOM(文档对象模型)接口来访问XML文档中的各个元素的。对于DOM接口的实现有多种方式,Delphi支持的方式有:   1)微软的MSXML SDK,这种方式是通过COM对象来实现;

camin920的专栏 1102

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Delphi 对XML的支持---TXMLDocument类

       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写。可以利用TXMLDocument把XML文档读到内存中,从而可以进行编辑、保存操作。TXMLDocument类是通过DOM(文档对象模型)接口来访问XML文档中的各个元素的。对于DOM接口的实现有多种方式,Delphi支持的方式有:1)微软的MSXML SDK,这种方式是通过COM对象

乱炖 1267

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 用JFC/Swing将可访问性构建到Java应用中
下一篇: java
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值