以下代码旨在 脱离TXMLDocument 操作 xml

unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
type
TForm3 = class(TForm)
XMLDocument1: TXMLDocument;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
public
end;
var
Form3: TForm3;
implementation
uses eng;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var xml:IXMLDocument;root,node,data:IXMLNode;i:Integer;
// nt:TNodeType;
begin
// 先来个中文版
xml := NewXMLDocument; // 默认 1.0
xml.Options := xml.Options + [doNodeAutoIndent]; // 缩进格式,而不是全在一行
xml.Encoding :='gb2312'; // 支持中文
xml.DocumentElement := xml.CreateNode('根节点'); // ntElement 表示节点
// 一样意思,只能含有一个根节点
// xml.AddChild('根节点'); // NameSpaceURI 我理解,不用管,是一个命名空间的路径地址
root := xml.DocumentElement;
root.Attributes['说明'] := '怎样不用 TXMLDocument 控件操作 XML文件';
root.Attributes['版权'] := '归 DuoSoft 所有';
root.Attributes['i'] := '这里显示i的值';
i := root.AttributeNodes.IndexOf('版权');
if i <> - then
begin
root.AttributeNodes[i].Text := '还是归大家所有吧';
root.AttributeNodes[i+].NodeValue := i;
end;
node := xml.createElement_x_x_x('tag1','');
node.Attributes['desc'] := '第1种添加节点方法';
root.ChildNodes.Add(node);
node := xml.CreateNode('tag2');
node.Attributes['desc'] := '第2种添加节点方法';
root.ChildNodes.Add(node);
root.AddChild('tag3').Attributes['desc'] := '第3种添加节点方法'; node := xml.CreateNode('备注',ntCData);
node.Text := ''; // 备注 -> 1234
root.ChildNodes.Add(node); node := xml.CreateNode('注释',ntComment);
node.NodeValue := ; // 注释 -> 5678
root.ChildNodes.Add(node); { for nt := ntReserved to ntNotation do
begin
i := Ord(nt);
try
node := xml.CreateNode('type'+IntToStr(i),nt);
node.Attributes['desc'] := '类型'+IntToStr(i);
root.ChildNodes.Add(node);
except
// node.Attributes['desc'] := '失败'+IntToStr(i);
// 各自意义以后再研究★★★★★★★★★★★★★
// TNodeType = (ntReserved, ntElement, ntAttribute, ntText, ntCData,
// ntEntityRef, ntEntity, ntProcessingInstr, ntComment, ntDocument,
// ntDocType, ntDocFragment, ntNotation);
end;
end; }
data := root.AddChild('数据清单');
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '张三';
Attributes['sex'] := True;
Attributes['Salary'] := 12.34;
end;
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '李四';
Attributes['sex'] := True;
Attributes['Salary'] := ;
end;
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '王五';
Attributes['sex'] := false;
Attributes['Salary'] := -90.1234;
end;
node := root.AddChild('备注');
node.Attributes['年'] := ;
node.Attributes['月'] := ;
node.Attributes['日'] := ;
node.Text := '建立了一份迷你表';
// node.NodeName := 'NodeName'; // 不可修改
// node.NodeValue := 'NodeValue'; // = node.Text
// 以下代码很有趣!!!尽然合并到一起去了
node.ChildNodes.Add(xml.CreateNode('再补充一个 ntText',ntText));
i := node.AttributeNodes.Add(xml.CreateNode('时',ntAttribute));
node.AttributeNodes[i].NodeValue := ;
node.AttributeNodes.Add(xml.CreateNode('分',ntAttribute));
node.Attributes['分'] := ;
// node.AttributeNodes.Add(xml.CreateNode('秒',xxxx)); // 不支持 ntElement ntText ntComment 等其他类型
// node.Attributes['秒'] := '还有秒?';
xml.SaveToFile(ExtractFilePath(ParamStr())+'chn.xml');
{
结果如下
<?xml version="1.0" encoding="gb2312" ?>
- <根节点 说明="怎样不用 TXMLDocument 控件操作 XML文件" 版权="还是归大家所有吧" i="1">
<tag1 desc="第1种添加节点方法" />
<tag2 desc="第2种添加节点方法" />
<tag3 desc="第3种添加节点方法" />
- <数据清单>
<record ID="1" Name="张三" sex="true" Salary="12.34" />
<record ID="2" Name="李四" sex="true" Salary="5678" />
<record ID="3" Name="王五" sex="false" Salary="-90.1234" />
</数据清单>
<备注 年="2010" 月="7" 日="12" 时="16" 分="12">建立了一份迷你表再补充一个 ntText</备注>
</根节点>
}
end;
procedure TForm3.Button2Click(Sender: TObject);
var xml:IXMLDocument;root,node,data:IXMLNode;
begin
// 节点变成英文的准备变成 接口
xml := NewXMLDocument; // 默认 1.0
xml.Options := xml.Options + [doNodeAutoIndent]; // 缩进格式,而不是全在一行
xml.Encoding :='gb2312'; // 支持中文
root := xml.AddChild('DuoXMLRoot');
root.Attributes['desc'] := '怎样不用 TXMLDocument 控件操作 XML文件';
root.Attributes['right'] := '归 DuoSoft 所有';
node := xml.createElement_x_x_x('tag1','');
node.Attributes['desc'] := '第1种添加节点方法';
root.ChildNodes.Add(node);
node := xml.CreateNode('tag2');
node.Attributes['desc'] := '第2种添加节点方法';
root.ChildNodes.Add(node);
root.AddChild('tag3').Attributes['desc'] := '第3种添加节点方法';
data := root.AddChild('MyData'); // 注意这个名字,等下会用到
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '张三';
Attributes['sex'] := True;
Attributes['Salary'] := 12.34;
end;
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '李四';
Attributes['sex'] := True;
Attributes['Salary'] := ;
end;
with data.AddChild('record') do
begin
Attributes['ID'] := ;
Attributes['Name'] := '王五';
Attributes['sex'] := false;
Attributes['Salary'] := -90.1234;
end;
node := root.AddChild('Memo');
node.Attributes['yy'] := ;
node.Attributes['mm'] := ;
node.Attributes['dd'] := ;
node.Text := '建立了一份迷你表';
xml.SaveToFile(ExtractFilePath(ParamStr())+'eng.xml');
end;

好了,有一个 eng.xml 接下去还得需要一下 TXMLDocument
XMLDocument1.FileName 选择 eng.xml
双击控件打开 wizard
选择第一个节点,再选择第二个节点。
把 Document Element Type 勾上
next finish
生成一个 eng.pas
use进来
接下去的代码如下:直接利用接口的概念操作刚才我们生成的那个 xml

procedure TForm3.Button3Click(Sender: TObject);
var dd:IXMLDuoXMLRootType;
i: Integer;
begin
dd := LoadDuoXMLRoot(ExtractFilePath(ParamStr())+'eng.xml');
dd.OwnerDocument.Options := dd.OwnerDocument.Options + [doAutoSave]; // 只要有修改就自动保存
Memo1.Clear;
for i := to dd.MyData.Count - do
begin
Memo1.Lines.Add('================='+inttostr(i)+'=================');
Memo1.Lines.Add(IntToStr(dd.MyData[i].ID));
Memo1.Lines.Add(dd.MyData[i].Name);
Memo1.Lines.Add(dd.MyData[i].Sex);
Memo1.Lines.Add(dd.MyData[i].Salary);
if dd.MyData[i].ID = dd.MyData.Count then
begin
ShowMessage('改变最后一个值');
dd.MyData[i].Salary := '123456789.0'; // 给你加薪
end;
end;
end;
end.

参考:http://www.cnblogs.com/key-ok/p/3380867.html

delphi XML 原来可以玩接口的更多相关文章

  1. Mybatis自动生成xml文件、dao接口、实体类

    Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...

  2. NativeXml: A native Delphi XML parser and writer

    http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...

  3. WebService如何封装XML请求 以及解析接口返回的XML

    原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...

  4. Delphi Xml

    用递归方法,使用 xml 文档生成 Treeview 树形视图.由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,从而实现了 xml 对 Treeview 的动态配置, ...

  5. 一个关于Delphi XML处理单元的BUG

    使用delphi的XML处理单元 XMLDoc XMLIntf 在获取XML文本内容的时候, 高版本的Delphi会丢失编码描述....在D7上却是正常的, 下面是测试源码: procedure TF ...

  6. 用soapUI测试xml格式的HTTP接口

    有些HTTP接口是直接传递parameter的,有些HTTP请求是将parameter转换为xml串进行传递的.现在要分享的就是如何用soapUI实现xml串的HTTP接口测试. 工具/原料   so ...

  7. 如何把Mybatis的Mapper.xml配置文件和dao接口放在同一个包下

    有的时候我们在Maven项目中写关于Mybatis的项目时,会涉及到很多的实体类,也就会涉及到很多的dao接口,如果此时我们仍然把dao接口和xml写在同一个包下,会让项目接口变得很乱,杂七杂八的,所 ...

  8. XML序列化与反序列化接口对接实战,看这篇就够了

    关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...

  9. delphi XML简单处理

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

随机推荐

  1. Hadoop WritableComparable接口

    WritableComparable接口 Writable接口大家可能都知道,它是一个实现了序列化协议的序列化对象.在Hadoop中定义一个结构化对象都要实现Writable接口,使得该结构化对象可以 ...

  2. js鼠标事件

    今天遇到一个非常奇怪而又搞笑的事情:给一个a标签添加一个鼠标移动上时给一个事件,我给其添加的是一个onMouseMove事件,结果在IE6 7 8 9和GOOLE中都很正常,结果在Firox中出现问题 ...

  3. Raphaël.js学习笔记

    Rapheal.js 是一个矢量图绘图库.对于支持HTML5 SVG的浏览器使用SVG绘图,不支持SVG的IE(ie6,7,8)使用VML绘图.所以Raphael.js的兼容性非常好. Raphael ...

  4. Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包

    官方文档:https://developer.Android.com/tools/publishing/app-signing.html 1. 默认为debug mode,使用的签名文件在: $HOM ...

  5. 遍历id,根据id作为条件循环查询。

    string id = "OE09924008161405102,OE36765709071405102,OE87852044171405102,OE09924008161405102&qu ...

  6. WPF中的资源简介、DynamicResource与StaticResource的区别(转)

    什么叫WPF的资源(Resource)?资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. 也就是 ...

  7. eclipse-自动注释

    在eclipse中自动添加'注释'的快捷键是'Alt+Shift+J',可以在 MyEclipse中的 Java->Code Style->Code Template->Commen ...

  8. Cacti优化之spine轮询器

    由于效率的原因,在需要大量采集数据时,如果使用自带的cmd.php轮询器会比较慢,1分钟1次的采集频率可能无法完成轮询所有的被监控的机器,从而可能导致部分监控项目不出图或图形断断续续.为了解决效率问题 ...

  9. Using GUID to generate the unique file name in C#

    GUID, the abbreviation of "Global Unique Identifier", is a unique reference number used as ...

  10. Spring MVC中注解 @ModelAttribute

    1.@ModelAttribute放在方法之上,在当前Control内的所有方法映射多个URL的请求,都会执行该方法 @ModelAttribute public void itemsCommon(H ...