威尼斯网址开户网站delphi 操作xml示例(DelphiBBS卡塔 尔(阿拉伯语:قطر‎

使用delphi来操作xml文件,或者xml字符串,

自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=20713
================================================================
2005-9-23 21:05:34    xml基础操作实例,因为刚开始学,如果有不对的地方,请批评指正,代码如下:

unit XMLOptionUnit;
//==============================================================================
//本实例演示
//1,XML 创建,打开,关闭操作
//2,XML 填加,添加到指定位置,删除,修改(替换),查找等操作
//作者:cactus123456@hotmail.com
//日期:2005.9.23
//版本:1.0
//==============================================================================
interface

uses
  SysUtils,ActiveX,MSXML2_TLB;

type
  RecUser=Record
    U_Id       :widestring;
    U_Name     :widestring;
    U_Sex      :widestring;
    U_Birth    :widestring;
    U_Tel      :widestring;
    U_Addr     :widestring;
    U_PostCode :widestring;
    U_Email    :widestring;
  end;

type
  TXMLOption=class
  private
    FActive  :boolean;
    FFilename: string;
    FXMLDoc  :IXMLDOMDocument;
    //填加一个子节点
    procedure AddSimpleElement(Parent: IXMLDOMElement; Field,Value: string);
  public
    procedure CreateBlank(Filename: string);
    procedure OpenXml(Filename: string);
    procedure CloseXml;
    procedure AppendUser(muser:RecUser);
    procedure InsertUser(uid:string;muser:RecUser);
    procedure RemoveUser(uid:string);
    procedure ReplaceUser(uid:string;newuser:RecUser);
    function  FindUser(userid:widestring):boolean;
  end;

implementation

const
  XMLTag          = 'xml';
  XMLPrologAttrs  = 'version="1.0" encoding="UTF-8"';
  XMLComment      = '简单XML文档操作用户实例'#13 +
                    '用户结构为序号,姓名,性别,出生年月日,电话,住址,邮编,电邮'#13 +
                    '作者 cactus123456@hotmail.com, 2005.9.21';
  UserWatcherTag = 'user-watcher';
  XMLComment2    = '创建文档时间:';
  UsersTag       = 'users';
  U_Id           = 'id';
  U_Name         = 'name';
  U_Sex          = 'sex';
  U_Birth        = 'birth';
  U_Tel          = 'tel';
  U_Addr         = 'addr';
  U_PostCode     = 'postcode';
  U_Email        = 'email';

//创建一个空XML,如果这个Filename文件已经存在,则覆盖
procedure TXMLOption.CreateBlank(Filename: string);
begin
  FActive:=false;
  FFilename:='';
  try
    FXMLDoc := CoDOMDocument.Create;
    FXMLDoc.AppendChild(FXMLDoc.CreateProcessingInstruction(XMLTag, XMLPrologAttrs));
    FXMLDoc.AppendChild(FXMLDoc.CreateComment(XMLComment));
    FXMLDoc.AppendChild(FXMLDoc.CreateElement(UserWatcherTag));
    FXMLDoc.AppendChild(FXMLDoc.CreateComment(XMLComment2+datetimetostr(now)));
    FXMLDoc.save(Filename);
    FFilename:=Filename;
    FActive:=true;
  except
    FXMLDoc:=nil;
  end;
end;
//打开一个存在的Filename XML文档
procedure TXMLOption.OpenXml(Filename: string);
begin
  if not Assigned(FXMLDoc) then
  begin
    FXMLDoc := CoDOMDocument.Create;
    if FXMLDoc.Load(Filename) then FActive:=true
    else FActive:=false;
    if FActive then FFilename:=Filename
    else FFilename:='';
  end;
end;
//关闭一个打开的XML文档
procedure TXMLOption.CloseXml;
begin
  if Assigned(FXMLDoc) then FXMLDoc:=nil;
  FFilename:='';
  FActive:=false;
end;
procedure TXMLOption.AddSimpleElement(Parent: IXMLDOMElement; Field,Value: string);
var
  Internal: IXMLDOMElement;
begin
  Internal:=IXMLDOMElement(Parent.AppendChild(FXMLDoc.CreateElement(Field)));
  Internal.AppendChild(FXMLDoc.CreateTextNode(Value));
end;
//填加一个节点到后面
procedure TXMLOption.AppendUser(muser:RecUser);
var
  xuser:IXMLDOMElement;
  xroot:IXMLDOMElement;
begin
  if FActive then
  begin
    xroot:=FXMLDoc.documentElement;
    xuser :=IXMLDOMElement(xroot.AppendChild(FXMLDoc.CreateElement(UsersTag)));
    AddSimpleElement(xuser,U_Id,muser.U_Id);
    AddSimpleElement(xuser,U_Name,muser.U_Name);
    AddSimpleElement(xuser,U_Sex,muser.U_Sex);
    AddSimpleElement(xuser,U_Birth,muser.U_Birth);
    AddSimpleElement(xuser,U_Tel,muser.U_Tel);
    AddSimpleElement(xuser,U_Addr,muser.U_Addr);
    AddSimpleElement(xuser,U_PostCode,muser.U_PostCode);
    AddSimpleElement(xuser,U_Email,muser.U_Email);
    FXMLDoc.save(FFilename);
  end;
end;
procedure TXMLOption.InsertUser(uid:string;muser:RecUser);
var
  xfind:IXMLDOMNode;
  xuser:IXMLDOMElement;
  xroot:IXMLDOMElement;
  xpath:string;
begin
  if not FActive then exit;
  xpath:=UsersTag+'['+U_Id+'="'+uid+'"]';
  xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
  //如果没有找到, xfind=nil 则在文件的末尾插入
  //如果找到,xfind<>nil 则在找到的纪录前面插入
  xroot:=FXMLDoc.documentElement;
  xuser :=IXMLDOMElement(xroot.insertBefore(FXMLDoc.CreateElement(UsersTag),xfind));
  AddSimpleElement(xuser,U_Id,muser.U_Id);
  AddSimpleElement(xuser,U_Name,muser.U_Name);
  AddSimpleElement(xuser,U_Sex,muser.U_Sex);
  AddSimpleElement(xuser,U_Birth,muser.U_Birth);
  AddSimpleElement(xuser,U_Tel,muser.U_Tel);
  AddSimpleElement(xuser,U_Addr,muser.U_Addr);
  AddSimpleElement(xuser,U_PostCode,muser.U_PostCode);
  AddSimpleElement(xuser,U_Email,muser.U_Email);
  FXMLDoc.save(FFilename);
end;
procedure TXMLOption.RemoveUser(uid:string);
var
  xfind:IXMLDOMNode;
  xroot:IXMLDOMElement;
  xpath:string;
begin
  if not FActive then exit;
  xpath:=UsersTag+'['+U_Id+'="'+uid+'"]';
  xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
  if xfind<>nil then
  begin
    xroot:=FXMLDoc.documentElement;
    xroot.removeChild(xfind);
    FXMLDoc.save(FFilename);
  end;
end;
procedure TXMLOption.ReplaceUser(uid:string;newuser:RecUser);
var
  xfind,newnode:IXMLDOMNode;
  xroot:IXMLDOMElement;
  xpath:string;
begin
  if not FActive then exit;
  xpath:=UsersTag+'['+U_Id+'="'+uid+'"]';
  xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
  //如果没有找到,则不做替换
  if xfind<>nil then
  begin
    newnode:=xfind.cloneNode(true);
    newnode.selectSingleNode(U_Id).text:=newuser.U_Id;
    newnode.selectSingleNode(U_Name).text:=newuser.U_Name;
    newnode.selectSingleNode(U_Sex).text:=newuser.U_Sex;
    newnode.selectSingleNode(U_Birth).text:=newuser.U_Birth;
    newnode.selectSingleNode(U_Tel).text:=newuser.U_Tel;
    newnode.selectSingleNode(U_Addr).text:=newuser.U_Addr;
    newnode.selectSingleNode(U_PostCode).text:=newuser.U_PostCode;
    newnode.selectSingleNode(U_Email).text:=newuser.U_Email;
    xroot:=FXMLDoc.documentElement;
    xroot.replaceChild(newnode,xfind);
    FXMLDoc.save(FFilename);
  end;
end;
function  TXMLOption.FindUser(userid:widestring):boolean;
var
  xuser:IXMLDOMNode;
  xpath:string;
begin
  result:=false;
  if not FActive then exit;
  //关于xpath语法说明,参见www.w3.org/TR/xpath
  xpath:=UsersTag+'['+U_Id+'="'+userid+'"]';
  xuser:=FXMLDoc.documentElement.selectSingleNode(xpath);
  if xuser<>nil then result:=true;
end;

initialization
  { Initialise COM }
  CoInitialize(nil);
finalization
  { Tidy up }
  CoUninitialize();

end.

调用上面单元的实例的代码,unit单元:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,XMLOptionUnit, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    WebBrowser1: TWebBrowser;
    Label1: TLabel;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
    { Private declarations }
    FXMLOption:TXMLOption;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FXMLOption:=TXMLOption.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FXMLOption.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FXMLOption.CreateBlank(edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  auser:RecUser;
begin
  auser.U_Id:=edit2.Text;
  auser.U_Name:='tom';
  auser.U_Sex:='男';
  auser.U_Birth:='1979-8-7';
  auser.U_Tel:='1236547890';
  auser.U_Addr:='tom 大街 8 号';
  auser.U_PostCode:='100018';
  auser.U_Email:='tom@888.com';
  FXMLOption.AppendUser(auser);
  WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  FXMLOption.OpenXml(edit1.Text);
  WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  FXMLOption.CloseXml;
  WebBrowser1.Navigate('about:blank');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if  FXMLOption.FindUser(edit2.text) then label1.Caption:='true'
  else label1.Caption:='false';
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  auser:RecUser;
begin
  auser.U_Id:=edit2.Text;
  auser.U_Name:='peter';
  auser.U_Sex:='女';
  auser.U_Birth:='1980-8-7';
  auser.U_Tel:='36-3654-7890';
  auser.U_Addr:='peter 大街 8 号';
  auser.U_PostCode:='100018';
  auser.U_Email:='peter@888.com';
  FXMLOption.InsertUser(edit2.text,auser);
  WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  FXMLOption.RemoveUser(edit2.text);
  WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
end;

procedure TForm1.Button8Click(Sender: TObject);
var
  auser:RecUser;
begin
  auser.U_Id:=edit2.Text;
  auser.U_Name:='张三';
  auser.U_Sex:='男';
  auser.U_Birth:='1970-8-7';
  auser.U_Tel:='001654-7890';
  auser.U_Addr:='张三 大街 8 号';
  auser.U_PostCode:='100018';
  auser.U_Email:='zhangsan@888.com';
  FXMLOption.ReplaceUser(edit2.Text,auser);
  WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
end;

end.

Unit单元对应的Form:

object Form1: TForm1
  Left = 192
  Top = 107
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 440
    Top = 400
    Width = 32
    Height = 13
    Caption = 'Label1'
  end
  object Button1: TButton
    Left = 256
    Top = 360
    Width = 75
    Height = 25
    Caption = 'CreateBlank'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 352
    Top = 360
    Width = 75
    Height = 25
    Caption = 'AddUser'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Edit1: TEdit
    Left = 208
    Top = 328
    Width = 121
    Height = 21
    TabOrder = 2
    Text = 'userxml.xml'
  end
  object Edit2: TEdit
    Left = 352
    Top = 328
    Width = 121
    Height = 21
    TabOrder = 3
    Text = '900'
  end
  object Button3: TButton
    Left = 256
    Top = 384
    Width = 75
    Height = 25
    Caption = 'OpenXml'
    TabOrder = 4
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 256
    Top = 408
    Width = 75
    Height = 25
    Caption = 'CloseXml'
    TabOrder = 5
    OnClick = Button4Click
  end
  object Button5: TButton
    Left = 352
    Top = 392
    Width = 75
    Height = 25
    Caption = 'FindUser'
    TabOrder = 6
    OnClick = Button5Click
  end
  object WebBrowser1: TWebBrowser
    Left = 0
    Top = 0
    Width = 688
    Height = 313
    Align = alTop
    TabOrder = 7
    ControlData = {
      4C0000001B470000592000000000000000000000000000000000000000000000
      000000004C000000000000000000000001000000E0D057007335CF11AE690800
      2B2E126208000000000000004C0000000114020000000000C000000000000046
      8000000000000000000000000000000000000000000000000000000000000000
      00000000000000000100000000000000000000000000000000000000}
  end
  object Button6: TButton
    Left = 432
    Top = 360
    Width = 75
    Height = 25
    Caption = 'InsertUser'
    TabOrder = 8
    OnClick = Button6Click
  end
  object Button7: TButton
    Left = 512
    Top = 360
    Width = 75
    Height = 25
    Caption = 'RemoveUser'
    TabOrder = 9
    OnClick = Button7Click
  end
  object Button8: TButton
    Left = 512
    Top = 392
    Width = 75
    Height = 25
    Caption = 'ReplaceUser'
    TabOrder = 10
    OnClick = Button8Click
  end
end 

有关许多接口,会需求通过xml举行数据调换,弄个例证,方便参照他事他说加以考察

Delphi 对XML的支持—TXMLDocument类
       Delphi7
援救对XML文书档案的操作,能够透过TXMLDocument类来得以实现对XML文书档案的读写。能够选择TXMLDocument把XML文书档案读到内部存款和储蓄器中,进而能够举行编辑、保存操作。TXMLDocument类是经过DOM(文档对象模型)接口来访谈XML文书档案中的各种要素的。对于DOM接口的落到实处有三种办法,Delphi扶植的章程有:1)微软的MSXML
SDK,这种艺术是通过COM对象来促成;2) Apache
的Xerces的兑现方式;3)其它后生可畏种是开源OpenXML达成格局。对于差异的接口实现情势得以通过设定TXMLDocument的DOMVender来开展支配。
 
援助XML的Delphi单元首要设有与…\Borland\Delphi7\Source\Xml目录下,首要不外乎:XMLIntf,XMLDoc,xmldom,msxmldom,xercesxmldom,xdom,oxmldom等单元。
l  XMLIntf――满含了Borland自个儿定义的XML文书档案的接口;
l  XMLDoc――是对XMLIntf中所定义接口的Borland达成;
l
 Xmldom――定义了DOM(文书档案对象模型卡塔尔接口,这里对DOM接口实行了Borland的贯彻;
l
 Msxmldom――完毕微软对Xmldom中定义的接口的落到实处,首要调用微软的COM对象来促成,对Xmldom中定义接口的包装;
l  Xercesxmldom――Borland通过Xerces XML
DOM方式来贯彻对Xmldom中定义接口的卷入;
l  Oxmldom――Borland通过接受OpenXML来贯彻对Xmldom中定义接口的包裹;
TXMLDocument类的性质,请参见Borland的帮忙文件;
读写XML文档
l    读取XML文档
常常性意况下不经过一直利用TXMLDocument对象来举行XML文件的读取,而是使用XMLDoc单元中提供的多少个有效的函数来读取XML文书档案,这个函数包括:
function LoadXMLDocument(const FileName: DOMString): IXMLDocument;
function LoadXMLData(const XMLData: DOMString): IXMLDocument;
overload;
function LoadXMLData(const XMLData: string): IXMLDocument; overload;
function NewXMLDocument(Version: DOMString = ‘1.0’): IXMLDocument;
能够见到那么些函数全部回去的是IXMLDocument接口,获得了IXMLDocument接口在张开文书档案的操作;
这么些函数都以由此创办TXMLDocument对象来落实对XML文书档案的读取的;当中NewXMLDocument仅仅创设一个IXMLDocument接口。
能够如此利用NewXMLDocument来读取XML文书档案:
    XMLDoc := NewXMLDocument;
XMLDoc.LoadFromFile(FileName);
l         保存XML文档
能够透过上边包车型客车措施来保存XML文书档案:
           XMLDoc := NewXMLDocument;
           iRoot := IXMLDoc.CreateNode(‘TestXMLDocument’);
           XMLDoc.DocumentElement := iRoot;
           …
           XMLDoc.SaveToFile(FileName);       
       能够见到经过接口来操作XML文书档案是不行便宜的;
选择不一致档期的顺序的XML剖析方法
     
 上边已经关系有二种艺术达成DOM,相当于可以动用Borland提供的3种差别的XML深入分析器来对XML文书档案举办剖判;
l         三种深入分析器
1、微软的分析器(MSXML SDK卡塔 尔(阿拉伯语:قطر‎
微软解析器首要使用在Windows中,在装置MSXML
SDK的时候会设置拆解剖析器,同不平日间IE浏览器也提供了剖析器,那么些深入解析器是叁个COM。
2、Apache的Xerces解析器
Borland本身实现了三个Xerces拆解解析器,那个能够因而调用xercesxmldom.dll模块来促成;如若利用那个深入剖判器也许必要同应用程序一齐举办分发xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL七个DLL文件
3、OpenXML解析器
其风流倜傥深入解析器的源代码存在于xdom.pas单元中,那几个能够由此http://www.philo.de/xml/举行跟新下载,那些是四个比利时人写的XML深入分析器;
l         使用分裂剖判器的相比
对于三种办法的深入分析器相比较如下:
1、微软的解析器
微软的拆解解析器当然好了,不过也不可能消灭存在的奇异情形,在本人个人的资历中,起码我们同盟社对此XML深入剖判的艺术,唯有在IE6.0以上的本子本事够健康的干活;
有关,Borland同样是经过引进MSXML.DLL的接口来贯彻的,所以能够推理出,同样存在相似的标题;这么些通过钻研TMSDOMImplementation(msxmldom单元中)的落成格局能够赢得申明,达成的进度中经过调用CoCreateInstance函数接口来兑现深入分析的;
在布告深入解析XML的代码的时候恐怕就能设有由于IE的本版的不等,需求把IE6.0一齐发表,比较勤奋;
2、Borland的Xerces解析器
这种艺术的深入分析器是经过 LoadLibrary(PChar(LibName));函数,LibName的剧情是xercesxmldom.dll(Windows平台卡塔 尔(阿拉伯语:قطر‎,libxercesxmldom.so.1(Linux平台卡塔 尔(英语:State of Qatar)。那么就需求随同应用程序一齐宣布的Dll,就包蕴了xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL;
那几个发表相对于透露差别版本的IE6.0来讲要相对轻便一些;
3、OpenXML解析器
出于存在xdom.pas单元,这几个单元中蕴含了一心的XML解析的源代码,那么应用这种艺术,能够幸免软件发布的种种难点,那是由于深入分析的代码被静态编写翻译在应用程序内部。独一倒霉的地点正是应用程序的体量或者要大学一年级部分;
l         如何利用区别的剖判器
笔者们能够写一个函数来选拔不相同的剖析器;
function NewDiffXmlDocument(DOMVender: string;
  Version: DOMString = ‘1.0’): IXMLDocument;
var
  XMLDoc : TXMLDocument;
begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.DOMVendor := GetDOMVendor(DOMVender);
  Result := XMLDoc;
  Result.Active := True;
  if Version <> ” then
    Result.Version := Version;
end;
里头DOMVender如若用Borland提供的三种艺术张开深入分析的话,分别取值是:
       Microsoft――存在于msxmldom.pas单元中的SMSXML常量;
       Xerces――存在于xercesxmldom .pas单元中的SXercesXML常量;
       OpenXML――存在于oxmldom.pas单元中的SOpenXML常量;
本条是出于在msxmldom,xercesxmldom,oxmldom多少个单元的initailization部分,都经过调用RegisterDOMVendor函数,注册了分化的拆解解析器接口;
本来,Borland雷同提供了生机勃勃种能够灵活进行扩充的机制来扩大客户本身的分析器,这一个供给继续,TDOMVendor类(存在于xmldom单元中)。实际上,Borland本身正是通过这种办法来兑现不一样方法深入解析器的;具体的贯彻进度能够通过参考oxmldom单元中对xdom的包装;
结论
     
 Delphi作为一个成功的开垦工具,它自己完结的对XML的支撑,肯定比网络上或多或少完结要天下太平、高效的多,大家一向不须求再拓宽别的的包裹什么MSXML.DLL的COM接口。当然,能够和谐完毕差异的XML分析器,也足以行使已经存在的拆解深入分析器。同一时间,能够看到Delphi对于XML的协理也是十三分完美的。
delphi操作xml学习笔记 之二 轻松读写 
第一字: xml 轻易读写 dom 
分类: 个人专区 
密级: 公开
XML的贰拾叁个热销难题
翻译:Chen Zhihong
那一个日子,差不离各类人都在座谈XML (Extensible 马克up
Language),可是很稀少人真正理解其意义。XML的推崇者感觉它亦可化解全数HTML不可能消弭的标题,让数据在分化的操作系统或选拔之间张开灵活沟通。确实,全体的观望家们都允许XML将引发一场内容公布和学识交流的革命。哪个人先踏向那个圈子,何人就可以预知大获其利。
这里的贰十一个有关XML的火爆难题可以令你成为黄金时代XML“行家”,或至少让您可以预知在其后看准XML的发展动向。 
1 什么是XML?                                     11
OSD和CDF与XML的涉嫌怎么样? 
2 XML为何主要?                                   12
电子商务(e-commerce)和XML? 
3 SGML、HTML和XML有啥关系?                    13 XML中的层叠样式? 
4 怎么样兑现XML?                                   14
XML怎么改善超链接? 
5 什么是文件类型定义(DTD)?                       15
服务器上帮衬XML吗? 
6 什么是格式完整和实惠的文本?                    16 何人理应学学XML? 
7 咋样在浏览器中读书XML?                         17
有啥编写XML的工具可供自家动用? 
8 HavalDF和XML有什么关联?                              18 XML的国际化? 
9 Netscape浏览器中如何兑现XML?                   19 XML的前途在哪儿? 
10 Microsoft浏览器中怎么着完成XML?                 20
何地能学到更加的多的XML知识? 
1.什么是XML?
XML代表扩充标志语言(Extensible 马克up Language). 由环球网联盟(W3C)带头,
XML在1999年10月十五日形成标准的标准. 
XML开辟者会告知你XML不是黄金时代种语言,而是叁个概念其余语言的系统.
你大概早已听别人说过, 或应用过这一个语言中的生机勃勃种,–如Microsoft援救”推手艺”的
Channel Definition format(CDF).
正致力于XML相关提出工作的W3C, 称XML为”表达数据中结构 的一块语法”.
结构化的数额指的是其剧情,意义或选择被标志的数据. 比如,
HTML中<H1>标记钦赐文本为某一字体和大小,
XML的号子将明了规定消息的类型: <BYLINE>标志能够分辨文书档案的笔者,
<P普拉多ICE>标识能够在二个存货清单中包括某风华正茂档期的顺序的基金 . 
由此将组织,内容和展现抽离, 同四个XML源文档只写二次,
能够用分歧的点子表现出来: 在微型机显示器上, 在手提电话荧屏上,
在为盲童服务的配备上翻译成语音, 等等.
它能够在只怕开垦的别的通信成品上中国人民解放军海军事工业程大学业作.
二个XML文书档案因而能够比其书写时的小编和出示本事生存得越来越久.
进而, XML将不止限于Internet, 例如, 可以服务于任何出版业,
极其是对于想制作可出今后多样传播媒介上的文书档案的人. 一些施用Standard
Generalized 马克up Language (S金霉素L)多年的重型文书档案出版商将转向XML. 还或许有,
独立于阳台的XML是为Web开辟的, 那是它将最具影响的地点. 
XML在Web的真正实力在于它是何许与文书档案对象模型(Document Object
Model,DOM)交互作用的. DOM定义了探望XML文书档案数据的接口. 
程序猿利用DOM可以用规范的点子编写动态的内容. 换句话说,
他们得以选用它来使浏览器文档树中的黄金年代部分特定内容依照一定的章程呈现,
譬喻, 当客商将鼠标移至文字上时, 这几个文字产生黄铜色. Netscape Navigator 和
Microsoft Internet Explorer浏览器都有独家的DOM,
然而他俩都称将要其下生龙活虎版本的浏览器中协助W3C 的行业内部DOM. 
2.XML怎么首要?
Web首脑之间的说法是内容至上.但是不幸地是:内容平日和其变现紧凑结合.请问你微微次在网页中遭遇二个纤维提示:”最佳在800×600像素的分辨率上海展览中心示”? 
XML将援救减轻上述难点, 因为网址建设者不用再指明在哪个地方呈现怎么,
而是指明文书档案 的结构. 举例, 你能够印证文书档案的标题, 我, 关联文书档案的项目清单,
等等. 然后, 任何三个有XML浏览器的设施都得以交给最适合它的文书档案版本,
那样的设备得以是八个掌上型Computer, 置顶盒, 或神速的劳作站. 
可是, 只怕XML的顶级风味是其内在的可扩展性.
公司和团队可以扩张XML来满意新的挑衅和应用.
贰个基于XML的语言已经在动用–微软的Channel Definition format (CDF)–
还会有更加的多将应际而生, 满含 Resource Definition format (卡宴DF) 和 Open Software
Description (OSD). 
XML 也答应成为调换数据 和文书档案的正经机制. 比方,
XML恐怕产生例外厂家的数据库在Internet上沟通消息的大器晚成种方法.今后可信赖地决定XML的趋向还会有部分早.
不过,
其各样大概性是令人敬畏的,那正是干什么围绕着XML有如此多的撼动的三个首要原因. 
3.S克林霉素L、HTML和XML有哪些关系? 
S丙胺博莱霉素L是在文字管理应用中表明数据的三个方法. 它已经现身十多年了,
XML和HTML都以从S链霉素L 发展而来的文书档案形式. 由此, 它们都有部分合营点,
如相似的语法和标记的使用.然则HTML是S欧霉素L的三个使用,
而XML是SGML的八个子集. 不同是重要的. 基本上HTML不能够用来定义新的利用,
而XML能够. 比方,陆风X8DF和CDF都是使用XML定义的应用. XML和HTML更象表兄弟,
并非亲兄弟. 事实上, XML和S金霉素L是特别的 —
XML文书档案能够经过其余S克拉霉素L制作或浏览工具阅读. 但是, XML未有S庆大霉素L那么复杂,
它是设计用来有限带宽的网络的, 如Internet. XML标准的合伙人Tim Bray说,
XML的宏图出发点是取S红霉素L的优点, 去除复杂的有的, 使其维持轻易,
可以在Web上中国人民解放军海军事工业程高校业作. 
HTML,S地霉素L和XML将持续用于其适用之处,
它们中的任何贰个不会使别的多个放弃.
HTML仍然为在Web上高速出版数量的最简便易行的艺术, 超越八分之四短时间的数码,
如会议章程或广告宣传册. 假如数量会长时间采纳, 况且必要更加多的片段结构,
Web建造者将愿意利用XML. 分化于HTML和XML,
S克拉霉素L恐怕永世不会在Internet上被普遍选拔,
因为它根本不曾为有个别互连网合同的急需而设计或优化过. 对于高级的,
复杂结构的问世应用, S红霉素L将持续适用. 
4.怎么达成XML? 
XML将以多少个例外的主意应用. 三个是在人机之间调换数据,
如从Web服务器至客户的浏览器. 另外贰个是在差别的选拔之间交流数据,
大概是机械之间沟通数据. 
在此些情况下, 你都大概供给三层架构: 后端数据库,
针对数据的拍卖逻辑的中间层服务器, 以致数额进一层体现和管理的客商端.
数据库能够从多少个数据来自选用音信, 也许早正是XML格式的数据.
中间层然后访谈数据并在结尾的显现层上输出和呈现.. 
近期, 网页有的时候候以这种艺术传送
–CNET的NEWS.COM从叁个数据库中刊登数据.可是要获取一页的新的视图,如NEWS.COM的新的“打印机友好”选项,
服务器必需爆发三个新的页面.
意气风发份适当格式化的XML文书档案将允许顾客端的使用为不一样的传播媒介改善文书档案的展现情势,
举个例子为打字与印刷机.
5.什么是DTD?
文书档案类型定义(DTD)是大器晚成套关于标志符的语准则则.它告诉你可以在文书档案中接收什么标识符,它们应该按什么次序现身,哪些标志符能够现身于任何标志符中,哪些标识符有属性,等等.DTD原本是为使用S螺旋霉素L开采的,
它能够是XML文书档案的后生可畏有个别, 不过它日常是大器晚成份单独的文书档案恐怕一绚丽多彩文档因为XML本身不是风流洒脱种语言,而是定义语言的一个系列,它从不象HTML相似享有七个通用的DTD.相反,
想使用XML实行数据调换的工业或团体得以定义它们本人的DTD.
假若二个团组织想用XML来标记仅在内部选择的文档, 它能够创设和睦个人的DTD.
比方 华尔街杂记人机联作版本拥有三个 DTD 来详细表明每大器晚成版, 此中有至于页,
文章, 概要, 标题下具名等等的信息.刊物近些日子应用S螺旋霉素L
DTD,但是它也正在开荒一个XML版本. 关于DTD并非从未计较的.
一些人备感它给商业职业扩张了可相信的价值, 而一些人以为它界定了创办性.
还或许有局地人感觉DTD有用, 不过还做得远远不够.
微软正尝试用它的XML数据提议来消除上三个愤恨,
然而钻探者说那一个改善应该在DTD标准自个儿进行. 
一些经销商, 包涵微软, 已经建议了代表DTD的多少个艺术, 称为schema.
他们曾经将其以XML数据交由给了W3C. 就象DTD, Schema提供了文书档案的不成方圆,
并提出用如何标志符, 标志符的属性, 之间的维系, 等等.不过,不相同于DTD,
schema能够定义数据类型. 比如, DTD也会有二个标识符 <P瑞鹰ICE>,
而标识符之间的内容能够是数字或字符串. Schema
能够规定只输入数字.那个法子确定有其亮点,
极其是用以采用,对象,或数据库之间的数码传输. 唯生龙活虎的标题是它将成为DTD标准,
照旧XML的八个扩张.
6.什么是组织能够和有效的文本? 
基本上有两类相关的XML文档: 结构能够的和卓有作用的. 结构能够的
XML文书档案遵从XML语法的雷同准绳, 这几个准则比HTML和S奇霉素L的一发严苛.
XML的字符数据并不是会吊在此, 未有某种终结标志符,
大概是象<MYTAG></MYTAG> 成对现身的 甘休标志符,
或许是贰个非常的在右尖括弧前带有二个斜杠的 空成分 标识, 例如<MYTAG/>; XML 标志总是以左尖括弧或 & 初始;
成分类型和性质名称是深浅写区分的; 属性需求引号; 等等. 
实用的 XML
文书档案服从某些特定的DTD.确认XML文书档案精确性的专门的学问任重(英文名:rèn zhòng卡塔 尔(英语:State of Qatar)而道远由制作出版工具承当,
而XML浏览器为读取XML文书档案, 只必要检讨其布局的精髓性. 那样,
制作工具中的剖判器得要反省结构特出性 和 有效性,
而浏览器仅要构思搜索已经协会优良的XML. 
7 如何在浏览器中阅读XML? 
开卷XML文书档案的工具常常称为XML深入深入分析器, 就算其更专门的学问的名称是XML微机.
XML微机将数据传送到APP, 以做制作, 出版, 查询, 或展现.
XML不给使用软件提供 应用程序接口 (API), 它只是把数量传给APP.
XML微型机不深入解析非结构能够的数据. Netscape 和 Microsoft
都已将XML深入剖析器包涵在其浏览器中, 或正布置将其满含到浏览器中. 
XML开采者团队提供免费的XML阅读器和深入分析器,
来应用到使用软件或XML制作软件:
Textuality的 Lark, 来自XML标准的小编之风流倜傥. 
Microstar的 AElfred, 二个基于Java的解析器. 
DataChannel的 DXP, 前身为有名的NXP, 或曾经增添了API的Norbert的 (Mikula)
XML 深入分析器.
8 卡宴DF和XML有什么关联?
若果XML提供了发挥语言的手艺,那么XML应用则是一定的语言.财富描述框架(Resource
Description Framework,ENVISIONDF)
是那样的一个用到软件:使用XML的语法举办数量建立模型. 
EnclaveDF是风流浪漫种描述和做客数据方法. 那意味着MuranoDF是有关数据的数量, 也许说元数据.
在Web中, 那一个元数据将被用来创立专门的学业的站点地图, 更确切的找寻结果,
和分等级次序的主旨索引. 大切诺基DF也同意智能书签, 当被索引的网页变化时,
书签随之发生变化. 假若您追踪内容准时更新的站点, 比方CNET的 NEWS.COM,
将很有用.对于网址建设者,创设可被搜寻引擎引用的其网址内容的元数据并不困难.
咱们超级快就会有商业化的软件, 来自动发出给定站点的冠道DF文件.
XML元数据也将活跃数据描述和评估的市场. 有好些个评级机构在互连网现身,
他们评估一切数据, 从爱戴孩子平安的站点到精品影片或干红站点.
CR-VDF能够应用的阶段的语法来陈诉评级机构.人们将接纳有她们认为到最合适的词汇表的评级机构,词汇表指的是评级机构给分化品种内容评级使用的特意的风流浪漫套术语
— 从性和强力到干白酸度.
9 Netscape浏览器中如何贯彻XML?
Netscape就要Communicator/Navigator
5.0中以八个代号为Aurora的付出构件来协助XML元数据.
Aurora利用处锐DF来获取Netscape所称的”桌面音讯周到集成.” 
Aurora在互连网、桌面和数据库之间搜索和管理消息.它就要桌面上以”窗口”菜单的界面现身,集聚指向当前项目,
斟酌焦点或普通移动等财富的指针.RAV4DF使Aurora的导航条指向区别数据类型(文字处理文书档案、表格数据、电子邮件音讯、数据库内容)的地面文件,
也指向Internet 或Intranet
服务器上的财富(寻觅和询问的结果、书签链接等). 
Netscape 5.0
版浏览器中提供了四个读取奇骏DF的XML解析器,在付加物最终交由前会以beta版现身.除了该LX570DF的兑现,
Netscape正安顿将一个通用的XML深入剖析器包罗在浏览器中,
而其浏览器能够和任何的XMLAPP同步干活,
例如化学标识语言(CML)和数学符号语言(MathML). 
“我们要使Navigator成为叁个XML平台,”Netscape原理技术员宝马X3.V.
Guha那样说.Guha 原本开辟过MCF (Meta Content format), MCF
后来投入了KugaDF标准.
10 Microsoft浏览器中什么得以达成XML?
微软的 Internet Explorer 4.0 是第二个贯彻XML的互联网浏览器.
微软提供了黄金年代对XML微电脑:浏览器所辅导的用C++写的拆解解析器,
和五个Web建造者能够从当中下载和出席他们自己的应用程序的Java解析器的源代码.
Java深入解析器是叁个灵光的 深入解析器,
正是说它根据贰个DTD或Schema来张开检查.为了增加性能,浏览器所带的C++版的深入分析器是多少个非有效的解析器.
据微软的制品老总Steve Sklepowich称, 那七个解析器都以”通用的”,
因为它们不依赖一定的XML应用, 如CDF.由于XML数据和其表现分离,
在二个浏览器本人其实彰显XML的技艺亟待样式表,比如XSL. 
与此同期, 微软使用了它所称的XML数据源对象(XML Data Source Object,XML
DSO).它利用了动态HTML的数额捆绑本领,
将后生可畏端的XML数据和另风流罗曼蒂克端的HTML数据相链接.IE 4.0做客XML文书档案,从当中查询数据,
然后当作HTML突显出来. 
微软也利用了 XML对象模型来让开荒者与浏览器中的XML数据开展人机联作.
它的落实是因而将HTML作为依据文书档案对象模型(DOM)的指标显现, 固然HTML 和 DOM
并不是从来宽容. DOM 让脚本和次序访谈结构化的XML数据. 
Sklepowich说, 纵然目前在微软, XML的主导在浏览器,
XML将最后出以后”任何HTML已经面世了的地点”.Bill Gates
已经领会透露微软Office 今后的本子将支撑 XML,
并且公司也安排辅助电子邮件包和制作XML工具的标准.
11 OSD和CDF与XML的关联何以?
CDF和OSD是微软帮助的三个XML应用.通过其XML剖判器,微软的 Internet Explorer
4.0读CDF文件来驱动和决定推频道所拉动的页.依照大切诺基DF所做的劳作,
CDF提出又递交给W3C,以利用PAJERODF的力量来展现分裂数量成分之间的联系. 
Open Software Description 是用来描述软件零部件的词汇表, 带有语法如从属,
版本和平台. OSD 描述怎样展现一个零器件的性状,
以至怎么着将该零件安装到Computer上. 它能够用于下载三个安然如故的软件包,
不过它根本设计用来不断扩展的更新. OSD 单独职业或和CDF一同坐班,
来定义应用频道.
OSD建议由微软软Marimba领导的一组发售商于1998年1月提须要W3C. 
12 电子商务(e-commerce)和XML?
CommerceNet是老牌子的非赢利性网络商务组织,它装有500多个成员.数年来CommerceNet努力支持e-commerce
产物和系统一齐专业. 其定义是同意讯息在不一致目录以内, 从目录到付款系统,
在付款系统里头调换. 已经意识XML能够在七个关键方面支援实现以上概念:
内容定义和音信交流. 
内容定义:CommerceNet 正在定义通用于两种商业贸易事务的数码成分.
这些名称为商务核心(Commerce
Core)的东西将概念怎样给诸如公司名称、地址、价格、条约和数目等东西作标志. 
音讯交换:开放,基于文本的XML用于服务器之间沟通职业信息很理想.CommerceNet
提议用基于XML的通用商务语言(Common Business
Language,CBL)来描述产物和劳务目录软件, 关于经济贸易法规和系统的元数据,
以致表格和音讯的软件. 大多CBL 取自已经存在的 Electronic Data Interchange
(EDI) 辞典, EDI辞典识别公众感到的术语, 如发票和买卖订单.
可是CBL超过EDI的经济贸易-到-商业的根本, 包括了零售业务和横向的供应链 —
从当中间商到批发商到分销商. 
如此的八个CBL应用是为使目录互用的制品新闻调换( Product Information
Exchange,PIX)标准. CommerceNet设计PIX,
以支持承包商和她们的承包商更便于地交流成品数据.
浓厚的靶子是工业团体–而非
CommerceNet–来将CBL作为特定的DTD的一个手拉手基本功运用.
一些珍视于工业的伊始尝试已经宣布了: 
Internt开松手拓(OBI):
一个在Internet上进展国际性的经济贸易间购物的标准.OBI基于当下的Internet规范,
如SSL(安全性)、SET(信用卡交易)和X.509(数字表明). OBI的维护者有Commerce
One、Connect、英特尔isys、InterWorld、Microsoft、Netscape、Open
马克et、和Oracle. 
盛放贸易公约(OTP): 多个在Web上向客商售物的朝气蓬勃律的, 可合作操作的意况.
法规将席卷从哪些优惠促销, 付款选拔, 到付加物运载, 选取和难点解决.
OTP由Master卡德 International, DigiCash, CyberCash, 休利特-Packard,
IBM, AT&T Universal 卡德, Netscape, 罗伊al Bank of Canada, 和局部其余金融机议和本事公司扶持. 
Internet内容交流标准(ICE): Vignette, Firefly Network, 和
一些别样铺面–包罗微软–正在开采一个叫作ICE的科班,
使能够在站点之间沟通在线资金财产, 不论那是内容, 应用程序, 或是元数据.
ICE将选取现存的正规化, 包蕴 OPS/P3P (使个人数据可信赖交流), CDF,OSD和兰德库罗德DF.
13 XML中的层叠样式?
因为XML将内容和表现分离, Web建造者须要新的不二秘籍来调整布署, 显示和输出.
style sheet 是难题的答案. 方今, 有三种可用来XML的 样式表: 
Cascading style Sheets (CSS) 
Extensible style Language (XSL) 
Document style Semantics and Specification Language (DSSSL). 
生机勃勃旦5.0版的浏览器协理XML,
XML对现存的CSS典型的支撑将会管理超越58%基本的品格和页面难点.
可是CSS对于标准出版商或然相当不足强大. 所以, 另后生可畏端存在着DSSSL,
八个在使用S青霉素L的高级出版商偏头疼行的ISO (国际标准组织)标准. 然则,
DSSSL是复杂的, 它管理的打字与印刷文书档案管理在Web上超级少有用. 
这两天结余了XSL,特别为XML而写的体制表.XSL近日上提交了W3C作为一个建议标准,个中的XSL调换部分(XSLT)已经于1996年6月变为专门的工作的典型.
它给了Web开垦者和客户较HTML更加多的变现灵活性. 举个例子,
HTML的<H2>标记符在颇负浏览器上的显现是主旨同样的,
不过XSL让开辟者钦命他们的页面成分怎样表现(即使客户能够在私有设置中重载它). 
XSL较CSS更刚劲, 因为它使Web建造者创立能够动态改造其表现的文书档案. 比如,
你能够包括那样的顺序语句, “要是三个XML成分的性质为数值10, 呈现为猩红,
不然为金红.” 大概您能够将”仅供内部使用”作为品质给二个段落标上,
那样它在有个别情状下不会现身. XSL被规划用来脚本语言如javascript.
14 XML什么修改超链接?
XML超链接比基本的HTML风格的超链接多了一些新的特色,
蕴涵没有必要手写过多javascript代码就能够成立”聪明的”链接. 况且在XML,
链接自身成为了目的, 能够象其余对象一样被管理.原本的链接规范–XLL,
或XML链接语言–正被分为多少个例外的专门的学问: XPointer 和 XLink. 
XPointer: 在HTML, 要链接到二个页面的中档,
页面笔者必需在这里时加上一定标志符. 使用XPointer, 你可以”取址到”
(不是”连接到”)别的人的文书的此外界分. 由此可以预知,
那样将有利于职业于法律文本, 科学和学术杂文, 以致W3C典型! 
XLink: 当顾客点击一个HTML超链接时, 当前的网页被连接到的公文代替.
XLink令Web建设构造者给链接扩展行为. 举个例子, 未来, 你必须要用部分javascript,
使在链接处弹出多少个独立的窗口,
然而XLink让Web建构者对链接进行编码来试行生机勃勃体系动作,
饱含弹出一个链接选拔的菜单. 
另三个使用能够是弹出二个对话框,
只怕是几个提醒客商它们正要创新数据库的警示.
链接弹出美食指南可能要求顾客点击八个框来表示在进一层管理前他们选用职责.
现在, 实现如此的功力要写过多的本子代码. 
XML也让Web建设构造者创造相近Web环工作的Extended Link,
Web环是通过”下一个/前四个”行进来导航的和谐接受出来的关于同风姿洒脱宗旨的网址组.
对于弹出菜谱太长的有关链接站点表, Web创建者能够成立三个链接表,
那几个表在不一致的站点, 页面时会有变化.
客户能够点击三个Logo来机关调换来环中的下多个成员. 将来如此的作用必要 CGI
scripts, 而Extended Links 提供了贰个标准的,
非私有的创建财富间联系的方法. 
照例有更加的多的主题素材要求化解, 特别是在行为政策上面.
必需由少年老成种办法来和煦之下三地方的关系: 文书档案笔者对链接所提出的表现,
顾客所喜好的突显链接音信的秘诀, 以致是还是不是和何时忽略客户的愿望的政策.
15 服务器上支撑XML吗?
XML被规划成供长久使用的, 高价值的文书档案的积累格式.
XML不是只让你定义标志符, 它也同意你定义文书档案的寄放结构.
生龙活虎篇HTML文档仅存在于二个文件中,
而三个XML文档能够由贮存在差异地点的五个公文(称为实体)组成.
这提议了作为文书档案存款和储蓄库的XML服务器的概念. 
服务器软件经销商已正在协助XML: 
Enigma, Insight 4.0
那是一个提供给出版商管理大型文书档案的正规化电子出版软件建设方案.
前段时间和Insight捆绑在合作的Enigma S维生霉素L/XML style Sheet Editor,
也得以视作三个独立成品提供. 
Hynet Technologies, Digital Library System
Digital Library System (DLS) 将文书档案和文书档案零部件作为标准软件对象开展管制,
允许引入在Adobe FrameMaker和Microsoft Word中开创的文书档案,
恐怕S威斯他霉素L/XML文件. 
Inso, DynaText Professional Publishing System
那是多人展览馆开索引, 搜索和创设脚本的软件, 它能够干活于运作在Windows NT
3.51 或 4.0, 或 Sun Solaris 2.5上的Microsoft的 IIS和 Netscape的
Enterprise and 法斯特Track servers. 
Open Market, Folio
Open 马克et的 Folio 4 消息保管和出殡和安葬产品将XML文书档案引进带索引的数据库,
以在IP网络上传递内容, 或将内容送至CD-ROM. 在八月份, Open
马克et发布抓实对XML的支撑, 允许文书档案以它们的笔者格式进行索引和确认保障卫安全全.
同期, Folio产物也将能够和任何基于专门的学业的炮制,
分析和生成XML文书档案的施工方案互相操作. 它的产物包罗 Folio siteDirector
(分发音信), Folio SecurePublish (事务管理软件), 和 Folio Publisher
(电子出版).
WebMethods, Web Automation Server
Web Automation Server
帮忙公司将根据浏览器的运用软件和任何应用软件的多寡相结合.
它是依赖XML的服务器, 使用 WebMethods本人的在机器间实行Web数据调换的WIDL
(Web Interface Definition Language). (这个市廛已经将WIDL作为正式建议上提交
World Wide Web Consortium.)
16 何人应该学学XML?
具备的Web建设构造者须求足够了然XML,以调整是不是接纳它.E-commerce站点和治本数据库中山大学量文书档案的站点是显明的首荐对象.老董恐怕不需求学习XML语法或怎么着创设DTD,他们仍要精通XML的潜在的力量并加以利用.假设最终的指标只是令人来读消息,
HTML能丰富满足标志音信的渴求. 不过大器晚成旦您想要为电动处理多少作计划,
你一定要思考将XML放入你的问世系统.
并非每三个做事在Web站点的HTML制小编必需成为XML制小编,
然则一些职员和工人应该精晓于XML–非常当站点的行事对象是值得为以往采纳而治本的数据和文书档案时.当然,XML的职能也意味复杂性–一些Web建构者已经意识她们得以在几天内理解HTML的底蕴,
而他们可能须求花多少个星期来适应XML.独有您自身本领决定是不是值得花这么些时间. 
17 有怎样编写XML的工具可供本身利用?
幸好的是, Web创建者不用完全靠他们协调从头初叶创立XML了.
商场上早就有了创办, 管理和出殡和下葬XML的工具, 并且一些企业也在拓张开垦. 
Adobe: 在1999年后期, Adobe将介绍能够输出到XML的 FrameMaker 和
FrameMaker+S林大霉素L 的联网版本. 那么些制品的完整版本将能够输入XML. Adobe有
一名代表在 W3C的XML职业组, Adobe也参预了XLink, Cascading style Sheets和
RAV4DF的劳作, 所以大家能够期望那一个本领将要Adobe将来的制品中现身. 
Allaire: HomeSite 4.0 和 Cold Fusion 4.0 都臆想在二零一八年夏天成品,
它们将扶植XML, 满含style sheets. HomeSite
3.0中风度翩翩度提供了三个CDF附加软件. 
ArborText: 在S螺旋霉素L领域内短时间职业的ArborText, 于三月份文告了XML styler,
八个无需付费的基于Java的XSL编辑器.
它的图形客商分界面能够让大家勿需知道XML语法就能够进行编辑. 以往, ArborText
会把XML styler集成到Adept中, Adept是商铺给打字与印刷出版提供的XML制作工具. 
DataChannel: 一个无偿的, 基于Java的管用的拆解解析器, 称为 DXP (DataChannel
XML Parser; 基于 Norbert Mikula 知名的NXP). 能够从该商厦的Web站点拿到.
它新颁发的是免费的XML工具包, XML 开采遇到, 它包涵了意气风发套构件,
帮忙大家早先读书和利用XML. 
Inso: 该商号提供它叫做的”第两个集成的, 端对端的, 创设, 转变, 存款和储蓄, 管理,
索引, 查询XML内容, 将其发布到Web, CD-ROM和打字与印刷机上的问世建设方案.”
其出品包涵 DynaTag 4.0, DynaBase 3.0, DynaText 3.1, 和所附的工具
DynaWeb. 
IntraNet Solutions: Intra.doc Management System的下大器晚成版本, IntraNet
Solution的基于Web的文书档案管理种类, 将会管理XML零部件和文书档案之间的关联,
提供和第三方XML制作工具的集成链接管理, 完备在浏览器中XML对象的接纳,
并在Intra.doc存款和储蓄库和XML编辑器之间提供一个并行的元数据模型. 
Microsoft: 微软希望在年底付出Office 9.0, 据电视发表, 它将有对XML的扶持. 
Microstar: ActiveSG/XML
是风流罗曼蒂克套在Internet上兼顾和布署基于事务的XML/S地霉素L系统的工具和技巧.
Microstar也提供了免费的Ælfred XML 剖析器. 
SoftQuad: HTML 编辑器 HotMetal Pro 将比不慢提供 Live Data Base Pages,
叁个让开辟者将HTML数据拉入数据库并以XML来回到的附加软件. 
Vignette: StoryServer 3.2 在Web上提交能利用XML的使用和内容.
它构成了关系型数据库, 多媒体和XML内容成立的工具. StoryServer
是叁个Web内容应用平台, 供创立, 处理, 和付出基于服务的Web应用之用,
举个例子在线出版, 知识管理, 和电子商务系统. (注:
CNET对Vignette有财政上的兴趣.) 
XPublish: XPublish是三个XML出版系统, 供Web站点开荒和保管,
允许开拓者以XML实行制作, 或用XML零部件延展近日的HTML文书档案,
然后将站点以HTML来宣布, 以让此外的正统Web浏览器能够访谈.
它包涵了二个Cascading style Sheets编辑器. 
WebMethods: 该公司制作基于XML的Web Automation 软件,
提供商业使用软件和Web数据的快速集成和一贯访谈. 它的 Web Interface
Definition Language (WIDL) 将和HTML/XML和表格的享有人机联作自动化,
提供在正规Web公约上显现必要-回答交互作用情势的多个通用方法. 
理之当然, 借使XML在Web上无处不在, 你能够阅览大概每意气风发种基于Web的应用,
特别是HTML编辑器, 数据库软件, 和电子商务软件,
会急忙投入对XML的相继等第的援救.
18 XML的国际化?
XML将使Web建构者成立真正的国际性站点变得比早前都轻易. 因为, 例如 Java,
它由Unicode (ISO 10646)定义, Unicode是叁个国际选取的标准,
用于描述世界上享有的假名, 字型, 字符和表意符, 它回顾 ASCII ISO 拉丁字符,
日本, 南韩, 中华夏族民共和国, 印度共和国, 希腊(Ελλάδα卡塔尔, 阿拉伯和任何字符. 它以致同意字符集的叶影参差,
比如, 风度翩翩篇以克罗地亚语展现的XML文书档案能够经过叁个元音变音参照到二个德文词汇. 
开辟者无需学习其余脚本语言, 以使Unicode在XML文书档案中生效,
文书档案在客户的浏览器中用适合的数量的字符集彰显出来.
19 XML的前程在何地?
就围绕着XML的保有活动, 很难预测八个月后它会是怎样样. XML和XLL
标准的合营者Tim Bray说, “大家已经制作了一个布置用来通用指标的工具,
大面积的大家对它的关心和利用评释我们是水到渠成的.” 
威尼斯网址开户网站 ,在长时间内,
XML将大概出现在元数据应用上,如LX570DF.下贰个大的熏陶将随着文书档案对象模型标准的特许而到来.Bray声称”XML和DOM的咬合确实是给Web带来生机的美妙子弹.” 
XML也应当会赞助电子商务.XML将使电子商务承包商以合作的法子给成品和其连带新闻(价格,尺寸,颜色,天性)进行标志,
使顾客在Web上对两样的信用社进行比较. 
并且, Netscape和Microsoft会继续壮大对XML浏览器的扶植,
包罗有效的和结构突出的XML文书档案, 越多的XML应用,
为XML设计的style-sheet帮衬, 和XML超连接契约.
请关心那四个公司甚至此外软件经销商在XML制作和出版工具上的进展.
20 何地能学到更加多的XML知识?
XML是二个错综相连的事物, 对于具备Web创设者都富有深厚的含意.
假使您想学学越多的东西, 这里是有的能够查阅的好地点: 
环球网缔盟(W3C): 
XML规范. 
有关XML标准的斟酌. 
Extensible style Language (XSL) W3C注释. 
Document Object Model 规范. 
加入W3C标准支出的XML开荒者的邮件地址清单. 
XML数见不鲜难题解答: 
ArborText的 XML链接和财富. 
微软的XML 站点提供了XML如何在二个天气预测和拍卖中工作的演示. 
Textuality搜集了XML标准协小编TimBray的有关XML的FAQ和到别的财富的片段链接. 
由爱尔兰Cork University College的Peter弗林代表W3C的XML特别兴趣组维护的XML FAQ.
XML新闻页面, 埃及开罗Summer Institute of Linguistics 的罗布in
Cover创立的S丙胺博莱霉素L/XML Web页面包车型地铁风流罗曼蒂克部分. 
公司、持续教育: 
中国XML联盟
图片通讯协会的XML文件 
S土霉素L Open 是一个国际性的非盈利性组织,
它提倡基于S地霉素L家族标准的结构化文书档案和数码交流.
它的InterX.org目的在于成为”XML开荒者和客商的论坛和能源主旨”. 
huihoo.com Copyright (2001,2002,2003,2004) Allright Reseved
看完了底子知识,下边就试行以下吧
本实例应用了MS的MSXML2_TLB,请自行检索下载
//用于读写XML的最简便的单元
unit XMLPurserUnit;
interface
uses
  SysUtils, Classes, Windows, ActiveX, MSXML2_TLB;
type
  //本例子通过DOM情势演示XML文件的读写进程
  TDOMXMLpurser=class
  public
    {
创设并保存XML文书档案,XMLDoc:=CoDOMDocument.Create未有艺术将文档类型对象填加
      到XMLDoc中,因为它并未有援用相应的DTD}
    procedure SavePropertiesToXML(Filename: string; Props: TStrings);
    { 解析原来就有些XML文书档案 }
    //适用于节点名称区别的景况
    procedure LoadPropertiesFromXML(Filename: string; Props:
TStrings);
    //适用于节点相似的情状
    procedure LoadFromXML(Filename: string; Props: TStrings);
  end;
implementation
const
  XMLTag          = ‘xml’;
  XMLPrologAttrs  = ‘version=”1.0″ encoding=”UTF-8″‘;
  XMLComment      = ‘ Sample XML document with data about movies’#13

在选择delphi的时候难免要与布置文件打交道。那么xml无疑是陈设文件的最佳格式,那么怎么操作xml呢?其实相当的轻易,看看下边包车型地铁代码吧。
[delphi]
  成效:  根据省份更新鸿营地产市音讯 
——————————————————————————-} 
procedure TForm.GetCityInfo; 
var 
  iXMLAreaFile : IXMLDocument; 
  sFileName,aProvince,sProvince,sCity : string; 
  nCol,nNum,nCityCount,nprovinceCount : Integer; 
begin 
  iXMLAreaFile := TXMLDocument.create(nil); 
  sFileName :=  getexepath + ‘Province.xml’; 
  iXMLAreaFile.FileName := sFileName; 
  iXMLAreaFile.active := True; 
  sProvince := cbbprovince.Text; 
  if sProvince = ‘全部’ then 
  begin 
    cbbcity.Items.Clear; 
    cbbcity.Items.Add(‘全部’); 
    cbbcity.ItemIndex := 0; 
  end 
  else 
  begin 
    cbbcity.Items.Clear; 
    cbbcity.Items.Add(‘全部’); 
    cbbcity.ItemIndex := 0; 
    nprovinceCount := iXMLAreaFile.DocumentElement.childnodes.Count; 
    for nNum := 0 to nprovinceCount-1 do 
     begin 
       //获取province节点内容 www.2cto.com  
       aProvince := iXMLAreaFile.DocumentElement.ChildNodes[nNum]. 
       AttributeNodes[0].nodevalue; 
       if aProvince = sProvince then 
       begin 
         ncityCount :=
iXMLAreaFile.DocumentElement.childnodes[nNum].childnodes.Count; 
         //获取省级节点内容 
         for nCol := 0 to ncitycount-1 do 
         begin 
           sCity := iXMLAreaFile.DocumentElement.ChildNodes[nNum]. 
           childnodes[nCol].AttributeNodes[0].nodevalue; 
           cbbCity.Items.Add(sCity); 
         end; 
       end; 
     end; 
  end; 
end; 

导入要求单元,XMLDoc,XMLIntf那多个库文件。

unit Unit1;

  •                     ‘and when and where they are showing’#13 +
                        ‘Developed by Keith Wood, 28 May 1999 ‘;
      MovieWatcherTag = ‘movie-watcher’;
      MoviesTag       = ‘movies’;
      MovieTag        = ‘movie’;
      Id              = ‘id’;
      Rating          = ‘rating’;
      StarringTag     = ‘starring’;
      TitleTag        = ‘title’;
    //保存XML
    procedure TDOMXMLpurser.SavePropertiesToXML(Filename: string; Props:
    TStrings);
    var
      XMLDoc: IXMLDOMDocument;
      i:integer;
     
    //—————————————————————————-
      procedure AddSimpleElement(Parent: IXMLDOMElement; Field: string;
                                 AsCDATA: Boolean = False);
      var
        Internal: IXMLDOMElement;
      begin
        Internal := IXMLDOMElement(Parent.AppendChild(
          XMLDoc.CreateElement((‘Field.FieldName’))));
        if AsCDATA then
          Internal.AppendChild(XMLDoc.CreateCDATASection(Field))
        else
          Internal.AppendChild(XMLDoc.CreateTextNode(Field));
      end;
      procedure GenerateHeaders;
      var
        Title: IXMLDOMElement;
      begin
        XMLDoc.AppendChild(XMLDoc.CreateProcessingInstruction(XMLTag,
    XMLPrologAttrs));
        XMLDoc.AppendChild(XMLDoc.CreateComment(XMLComment));
        XMLDoc.AppendChild(XMLDoc.CreateElement(MovieWatcherTag));
        Title := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild(
            XMLDoc.CreateElement(TitleTag)));
        Title.AppendChild(XMLDoc.CreateTextNode(‘主题音讯’));
      end;
      procedure GenerateStars(Starring: IXMLDOMElement);
      begin
        AddSimpleElement(Starring, ‘(StarField)’);
      end;
      procedure GenerateMovies(moviename:string);
      var
        Movies, Movie: IXMLDOMElement;
      begin
        Movies := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild(
            XMLDoc.CreateElement(MoviesTag)));
            Movie := IXMLDOMElement(Movies.AppendChild(
              XMLDoc.CreateElement(MovieTag)));
            Movie.SetAttribute(Id, ‘123’);
            Movie.SetAttribute(Rating, ‘456’);
            AddSimpleElement(Movie, ‘789’);
            AddSimpleElement(Movie, moviename);
            AddSimpleElement(Movie, ‘”(DirectorField)”‘);
            GenerateStars(IXMLDOMElement(Movie.AppendChild(
              XMLDoc.CreateElement(StarringTag))));
            AddSimpleElement(Movie, ‘FieldByName(SynopsisField)’, True);
      end;
     
    //—————————————————————————-
    begin
      try
        XMLDoc        := CoDOMDocument.Create;
        GenerateHeaders;
        i:=0;
        repeat
          GenerateMovies(Props.Strings[i]);
          inc(i);
        until i>=Props.Count;
        Props.Text := XMLDoc.XML;
        XMLDoc.save(Filename);         //u8-dos格式
        //Props.SaveToFile(Filename);  //dos格式
      finally
        { Release the DOM }
        XMLDoc        := nil;
      end;
    end;
    //加载无重复属性的XML
    procedure TDOMXMLpurser.LoadPropertiesFromXML(Filename: string; Props:
    TStrings);
    var
      XMLDoc: IXMLDOMDocument;
      i: Integer;
      procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix:
    string);
      var
        Index: Integer;
      begin
        if (Element.NodeType = NODE_TEXT) or (Element.NodeType =
    NODE_CDATA_SECTION) then
            Props.Values[Copy(PropPrefix, 2, Length(PropPrefix) – 1)] :=
    Element.NodeValue
        else
          for Index := 0 to Element.ChildNodes.Length – 1 do
              LoadSubProperties(Element.ChildNodes[Index], PropPrefix +
    ‘.’ + Element.NodeName);
      end;
    begin
      XMLDoc := CoDOMDocument.Create;
      Props.Clear;
      try
        if XMLDoc.Load(Filename) then
        with XMLDoc.DocumentElement do
          for i := 0 to ChildNodes.Length – 1 do
            LoadSubProperties(ChildNodes[i], ”);
      finally
        XMLDoc := nil;
      end;
    end;
    //加载XML
    procedure TDOMXMLpurser.LoadFromXML(Filename: string; Props:
    TStrings);
    var
      XMLDoc: IXMLDOMDocument;
      i: Integer;
      procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix:
    string);
      var
        Index: Integer;
      begin
        if (Element.NodeType = NODE_TEXT) or (Element.NodeType =
    NODE_CDATA_SECTION) then
            Props.Add(Copy(PropPrefix, 2, Length(PropPrefix) – 1)+’=’+
    Element.NodeValue)
        else
          for Index := 0 to Element.ChildNodes.Length – 1 do
              LoadSubProperties(Element.ChildNodes[Index], PropPrefix +
    ‘.’ + Element.NodeName);
      end;
    begin
      XMLDoc := CoDOMDocument.Create;
      Props.Clear;
      try
        if XMLDoc.Load(Filename) then
        with XMLDoc.DocumentElement do
          for i := 0 to ChildNodes.Length – 1 do
            LoadSubProperties(ChildNodes[i], ”);
      finally
        XMLDoc := nil;
      end;
    end;
    initialization
      { Initialise COM }
      CoInitialize(nil);
    finalization
      { Tidy up }
      CoUninitialize();
    end.
    //调用XML读写
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    Forms,
      Dialogs, StdCtrls, OleCtrls, SHDocVw,XMLPurserUnit;
    type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
        FXMLpurser:TDOMXMLpurser;
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FXMLpurser:=TDOMXMLpurser.Create;
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FXMLpurser.Free;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      filename:string;
    begin
      memo1.Lines.Clear;
      filename:=ExtractFilePath(application.ExeName)+’MailTemplate.xml’;
      FXMLpurser.LoadPropertiesFromXML(filename,memo1.Lines);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      filename:string;
    begin
      memo1.Lines.Clear;
      filename:=ExtractFilePath(application.ExeName)+’MailTemplate.xml’;
      FXMLpurser.LoadFromXML(filename,memo1.Lines);
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
     
    FXMLpurser.SavePropertiesToXML(ExtractFilePath(application.ExeName)+’MailTemplate1.xml’,memo1.Lines);
    end;
    end.
    //unit1对应的form
    object Form1: TForm1
      Left = 192
      Top = 107
      Width = 696
      Height = 480
      Caption = ‘Form1’
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = ‘MS Sans Serif’
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      PixelsPerInch = 96
      TextHeight = 13
      object WebBrowser1: TWebBrowser
        Left = 8
        Top = 8
        Width = 321
        Height = 361
        TabOrder = 0
        ControlData = {
          4C0000002D2100004F2500000000000000000000000000000000000000000000
          000000004C000000000000000000000001000000E0D057007335CF11AE690800
          2B2E126208000000000000004C0000000114020000000000C000000000000046
          8000000000000000000000000000000000000000000000000000000000000000
          00000000000000000100000000000000000000000000000000000000}
      end
      object Memo1: TMemo
        Left = 336
        Top = 8
        Width = 345
        Height = 361
        Lines.Strings = (
          ‘星球战役1’
          ‘星球战视而不见2’
          ‘星球大战3’
          ‘星球大战前传1’
          ‘星球战争前传2’
          ‘星球大战前传3’)
        ScrollBars = ssBoth
        TabOrder = 1
      end
      object Button1: TButton
        Left = 192
        Top = 384
        Width = 147
        Height = 25
        Caption = ‘LoadPropertiesFromXML’
        TabOrder = 2
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 344
        Top = 384
        Width = 83
        Height = 25
        Caption = ‘LoadFromXML’
        TabOrder = 3
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 432
        Top = 384
        Width = 121
        Height = 25
        Caption = ‘SavePropertiesToXML’
        TabOrder = 4
        OnClick = Button3Click
      end
    end
    //多少个最简便易行的XML文件 MailTemplate.xml
    <?xml version=”1.0″?>
    <mailTemplate>
      <smtp>
        <host>mail.ncisystems.com</host>
        <port/>
        <user>keith</user>
        <from>kbwood@thingies.com</from>
      </smtp>
      <database>
        <alias>mailtemp</alias>
        <user/>
        <password/>
      </database>
      <settings>
        <pauseTime>2000</pauseTime>
        <template>MailMessage.xml</template>
        <testing>Y</testing>
      </settings>
    </mailTemplate>   
     
    delphi操作xml学习笔记 之三 进级必读 
    关键字: xpath 
    分类: 个人专区 
    密级: 公开 
    学会简单读写xml之后,笔者想大多数选择都不会滞留在此一步,借使想进一层操作,将在熟稔xpath,XML
    路线语言。它是加上,删除,查询等更是操作xml所必备知道的。
    有关xpath
    1.0的亲力亲为介绍,参见 
    XPath 2.0
    简介,参见
    要领必读:
    2.5 缩简句法
    那是一些利用缩简句法的地点路线例子:
    para 选拔上下文节点的 para 成分孩子
    * 接收上下文节点的兼具的成分孩子
    text() 接收上下文节点的全数的正文节点孩子
    @name 选取上下文节点的 name 属性
    @* 选取上下文节点的持有的品质
    para[1] 选拔上下文节点的率先个 para 孩子
    para[last()] 选用上下文节点的末了两个 para 孩子
    */para 采用上下文节点的享有的 para 孙子
    /doc/chapter[5]/section[2] 选择doc的第多个 chapter 的第4个section 
    chapter//para 采取上下文节点的 chapter 成分孩子的装有 para 成分子孙
    //para 采纳文书档案根的保有的 para
    子孙,也正是选拔上下文节点所在的文书档案中负有的 para 成分
    //olist/item 选拔上下文节点所在的文书档案中有所的以 olist 为父的 item 成分
    . 接受上下文节点
    .//para 选用上下文节点的 para 成分子孙
    .. 接受上下文节点的父
    ../@lang 接纳上下文节点的父的 lang 属性
    para[@type=”warning”] 选择的上下文节点的持有的有属性 type 且值为
    warning 的 para 孩子
    para[@type=”warning”][5] 选择的上下文节点的兼具的有属性 type 且值为
    warning 的 para 孩子中的第三个
    para[5][@type=”warning”] 选拔的上下文节点的第八个 para
    孩子风流倜傥旦该节点有品质 type 且值为 warning 的话
    chapter[title=”Introduction”] 接收上下文节点的 chapter
    孩子只要它有三个或多少个 title 孩子且字串值为 Introduction
    chpater[title] 选取的上下文节点中有三个或一个以上 title 孩子的 chpater
    孩子
    employee[@secretary and @assistant] 接纳上下文节点的享有既有 secretary
    属性又有 assistant 属性的 employee 孩子
    最入眼的缩写是 child:: 能从地方步进省略掉。实际效果上,child
    是缺省轴。举例,地址路线 div/para 是 child::div/child::para 的缩写。
    质量也会有缩写情势: attribute:: 能被缩写成 @。举例,地址路径para[@type=”warning”] 为 child::para[attribute::type=”warning”]
    的缩写,也等于选取有 type 属性且属性值为 warning 的 para 孩子。
    // 是 /descendant-or-self::node()/ 的缩写。比方,//para 是
    /descendant-or-self::node()/child::para 的缩写,由此选取文书档案中有所的
    para 成分(纵然 para 成分是文书档案成分,也会被 //para
    所筛选,因为文档成分是根节点的子女卡塔尔; div//para 是
    div/descendant-or-self::node()/child::para 的缩写,由此将筛选 div
    孩子的富有 para 子孙。
    注意:
    地方路线 //para[1] 与地方路线 /descendant::para[1]
    的味道不近似,后面一个接受第一个 para 成分子孙,后面一个采纳是他们的父的率先
    para 孩子的享有的儿孙 para 成分。
    地方路进 . 是 self::node() 的缩写。那与 //
    一同利用极度有用。比方,地址路线 .//para 是
    self::node()/descendant-or-self::node()/child::para
    的缩写,由此将选拔上下文节点的保有的 para 子孙成分。
    如出生机勃勃辙,地址路线 .. 是 parent::node() 的缩写。举个例子,../title 是
    parent::node()/child::title 的缩写因而那将选取上下文节点的父的 title
    孩子。 
    delphi操作xml学习笔记 之四 轻便增加和删除查改 
    关键字: AppendChild insertBefore removeChild replaceChild 
    分类: 个人专区 
    密级: 公开 
    xml底子操作实例,因为刚从前学,借使有不许则的地点,请议论指正,代码如下:
    unit XMLOptionUnit;
    //==============================================================================
    //本实例演示
    //1,XML 创制,展开,关闭操作
    //2,XML 填加,增添到钦定地方,删除,更正(替换卡塔尔国,查找等操作
    //作者:cactus123456@hotmail.com
    //日期:2005.9.23
    //版本:1.0
    //==============================================================================
    interface
    uses
      SysUtils,ActiveX,MSXML2_TLB;
    type
      RecUser=Record
        U_Id       :widestring;
        U_Name     :widestring;
        U_Sex      :widestring;
        U_Birth    :widestring;
        U_Tel      :widestring;
        U_Addr     :widestring;
        U_PostCode :widestring;
        U_Email    :widestring;
      end;
    type
      TXMLOption=class
      private
        FActive  :boolean;
        FFilename: string;
        FXMLDoc  :IXMLDOMDocument;
        //填加一个子节点
        procedure AddSimpleElement(Parent: IXMLDOMElement; Field,Value:
    string);
      public
        procedure CreateBlank(Filename: string);
        procedure OpenXml(Filename: string);
        procedure CloseXml;
        procedure AppendUser(muser:RecUser);
        procedure InsertUser(uid:string;muser:RecUser);
        procedure RemoveUser(uid:string);
        procedure ReplaceUser(uid:string;newuser:RecUser);
        function  FindUser(userid:widestring):boolean;
        function  GetNodeLength(node:widestring):integer;
      end;
    implementation
    const
      XMLTag          = ‘xml’;
      XMLPrologAttrs  = ‘version=”1.0″ encoding=”UTF-8″‘;
      XMLComment      = ‘轻易XML文书档案操功效户实例’#13 +
                       
    ‘客商结构为序号,姓名,性别,出生年月日,电话,住址,邮编,电邮’#13 +
                        ‘作者 cactus123456@hotmail.com, 2005.9.21′;
      UserWatcherTag = ‘user-watcher’;
      XMLComment2    = ‘创设文书档案时间:’;
      UsersTag       = ‘users’;
      U_Id           = ‘id’;
      U_Name         = ‘name’;
      U_Sex          = ‘sex’;
      U_Birth        = ‘birth’;
      U_Tel          = ‘tel’;
      U_Addr         = ‘addr’;
      U_PostCode     = ‘postcode’;
      U_Email        = ’email’;
    //创制一个空XML,如若这些Filename文件已经存在,则覆盖
    procedure TXMLOption.CreateBlank(Filename: string);
    begin
      FActive:=false;
      FFilename:=”;
      try
        FXMLDoc := CoDOMDocument.Create;
        FXMLDoc.AppendChild(FXMLDoc.CreateProcessingInstruction(XMLTag,
    XMLPrologAttrs));
        FXMLDoc.AppendChild(FXMLDoc.CreateComment(XMLComment));
        FXMLDoc.AppendChild(FXMLDoc.CreateElement(UserWatcherTag));
       
    FXMLDoc.AppendChild(FXMLDoc.CreateComment(XMLComment2+datetimetostr(now)));
        FXMLDoc.save(Filename);
        FFilename:=Filename;
        FActive:=true;
      except
        FXMLDoc:=nil;
      end;
    end;
    //打开叁个留存的Filename XML文书档案
    procedure TXMLOption.OpenXml(Filename: string);
    begin
      if not Assigned(FXMLDoc) then
      begin
        FXMLDoc := CoDOMDocument.Create;
        if FXMLDoc.Load(Filename) then FActive:=true
        else FActive:=false;
        if FActive then FFilename:=Filename
        else FFilename:=”;
      end;
    end;
    //关闭三个开荒的XML文书档案
    procedure TXMLOption.CloseXml;
    begin
      if Assigned(FXMLDoc) then FXMLDoc:=nil;
      FFilename:=”;
      FActive:=false;
    end;
    procedure TXMLOption.AddSimpleElement(Parent: IXMLDOMElement;
    Field,Value: string);
    var
      Internal: IXMLDOMElement;
    begin
     
    Internal:=IXMLDOMElement(Parent.AppendChild(FXMLDoc.CreateElement(Field)));
      Internal.AppendChild(FXMLDoc.CreateTextNode(Value));
    end;
    //填加二个节点到背后
    procedure TXMLOption.AppendUser(muser:RecUser);
    var
      xuser:IXMLDOMElement;
      xroot:IXMLDOMElement;
    begin
      if FActive then
      begin
        xroot:=FXMLDoc.documentElement;
        xuser
    :=IXMLDOMElement(xroot.AppendChild(FXMLDoc.CreateElement(UsersTag)));
        AddSimpleElement(xuser,U_Id,muser.U_Id);
        AddSimpleElement(xuser,U_Name,muser.U_Name);
        AddSimpleElement(xuser,U_Sex,muser.U_Sex);
        AddSimpleElement(xuser,U_Birth,muser.U_Birth);
        AddSimpleElement(xuser,U_Tel,muser.U_Tel);
        AddSimpleElement(xuser,U_Addr,muser.U_Addr);
        AddSimpleElement(xuser,U_PostCode,muser.U_PostCode);
        AddSimpleElement(xuser,U_Email,muser.U_Email);
        FXMLDoc.save(FFilename);
      end;
    end;
    procedure TXMLOption.InsertUser(uid:string;muser:RecUser);
    var
      xfind:IXMLDOMNode;
      xuser:IXMLDOMElement;
      xroot:IXMLDOMElement;
      xpath:string;
    begin
      if not FActive then exit;
      xpath:=UsersTag+'[‘+U_Id+’=”‘+uid+'”]’;
      xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
      //若无找到, xfind=nil 则在文书的最后插入
      //假使找到,xfind<>nil 则在找到的纪录后面插入
      xroot:=FXMLDoc.documentElement;
      xuser
    :=IXMLDOMElement(xroot.insertBefore(FXMLDoc.CreateElement(UsersTag),xfind));
      AddSimpleElement(xuser,U_Id,muser.U_Id);
      AddSimpleElement(xuser,U_Name,muser.U_Name);
      AddSimpleElement(xuser,U_Sex,muser.U_Sex);
      AddSimpleElement(xuser,U_Birth,muser.U_Birth);
      AddSimpleElement(xuser,U_Tel,muser.U_Tel);
      AddSimpleElement(xuser,U_Addr,muser.U_Addr);
      AddSimpleElement(xuser,U_PostCode,muser.U_PostCode);
      AddSimpleElement(xuser,U_Email,muser.U_Email);
      FXMLDoc.save(FFilename);
    end;
    procedure TXMLOption.RemoveUser(uid:string);
    var
      xfind:IXMLDOMNode;
      xroot:IXMLDOMElement;
      xpath:string;
    begin
      if not FActive then exit;
      xpath:=UsersTag+'[‘+U_Id+’=”‘+uid+'”]’;
      xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
      if xfind<>nil then
      begin
        xroot:=FXMLDoc.documentElement;
        xroot.removeChild(xfind);
        FXMLDoc.save(FFilename);
      end;
    end;
    procedure TXMLOption.ReplaceUser(uid:string;newuser:RecUser);
    var
      xfind,newnode:IXMLDOMNode;
      xroot:IXMLDOMElement;
      xpath:string;
    begin
      if not FActive then exit;
      xpath:=UsersTag+'[‘+U_Id+’=”‘+uid+'”]’;
      xfind:=FXMLDoc.documentElement.selectSingleNode(xpath);
      //若无找到,则不做替换
      if xfind<>nil then
      begin
        newnode:=xfind.cloneNode(true);
        newnode.selectSingleNode(U_Id).text:=newuser.U_Id;
        newnode.selectSingleNode(U_Name).text:=newuser.U_Name;
        newnode.selectSingleNode(U_Sex).text:=newuser.U_Sex;
        newnode.selectSingleNode(U_Birth).text:=newuser.U_Birth;
        newnode.selectSingleNode(U_Tel).text:=newuser.U_Tel;
        newnode.selectSingleNode(U_Addr).text:=newuser.U_Addr;
        newnode.selectSingleNode(U_PostCode).text:=newuser.U_PostCode;
        newnode.selectSingleNode(U_Email).text:=newuser.U_Email;
        xroot:=FXMLDoc.documentElement;
        xroot.replaceChild(newnode,xfind);
        FXMLDoc.save(FFilename);
      end;
    end;
    function  TXMLOption.FindUser(userid:widestring):boolean;
    var
      xuser:IXMLDOMNode;
      xpath:string;
    begin
      result:=false;
      if not FActive then exit;
     
    //关于xpath语法表明,参见www.w3.org/TR/xpath
      xpath:=UsersTag+'[‘+U_Id+’=”‘+userid+'”]’;
      xuser:=FXMLDoc.documentElement.selectSingleNode(xpath);
      if xuser<>nil then result:=true;
    end;
    function  TXMLOption.GetNodeLength(node:widestring):integer;
    var
      xNode:IXMLDOMNodeList;
      xroot:IXMLDOMElement;
      xpath:widestring;
    begin
      result:=0;
      xpath:=node;
      try
        xroot:=FXMLDoc.documentElement;
        xNode:=xroot.selectNodes(xpath);
        result:=xNode.length;
      except
      end;
    end;
    initialization
      { Initialise COM }
      CoInitialize(nil);
    finalization
      { Tidy up }
      CoUninitialize();
    end.
    调用上面单元的实例的代码,unit单元:
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    Forms,
      Dialogs, StdCtrls,XMLOptionUnit, OleCtrls, SHDocVw;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        WebBrowser1: TWebBrowser;
        Label1: TLabel;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
      private
        { Private declarations }
        FXMLOption:TXMLOption;
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FXMLOption:=TXMLOption.Create;
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FXMLOption.Free;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      FXMLOption.CreateBlank(edit1.Text);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      auser:RecUser;
    begin
      auser.U_Id:=edit2.Text;
      auser.U_Name:=’tom’;
      auser.U_Sex:=’男’;
      auser.U_Birth:=’1979-8-7′;
      auser.U_Tel:=’1236547890′;
      auser.U_Addr:=’tom 大街 8 号’;
      auser.U_PostCode:=’100018′;
      auser.U_Email:=’tom@888.com‘;
      FXMLOption.AppendUser(auser);
     
    WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      FXMLOption.OpenXml(edit1.Text);
     
    WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      FXMLOption.CloseXml;
      WebBrowser1.Navigate(‘about:blank’);
    end;
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      if  FXMLOption.FindUser(edit2.text) then label1.Caption:=’true’
      else label1.Caption:=’false’;
    end;
    procedure TForm1.Button6Click(Sender: TObject);
    var
      auser:RecUser;
    begin
      auser.U_Id:=edit2.Text;
      auser.U_Name:=’peter’;
      auser.U_Sex:=’女’;
      auser.U_Birth:=’1980-8-7′;
      auser.U_Tel:=’36-3654-7890′;
      auser.U_Addr:=’peter 大街 8 号’;
      auser.U_PostCode:=’100018′;
      auser.U_Email:=’peter@888.com‘;
      FXMLOption.InsertUser(edit2.text,auser);
     
    WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
    end;
    procedure TForm1.Button7Click(Sender: TObject);
    begin
      FXMLOption.RemoveUser(edit2.text);
     
    WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
    end;
    procedure TForm1.Button8Click(Sender: TObject);
    var
      auser:RecUser;
    begin
      auser.U_Id:=edit2.Text;
      auser.U_Name:=’张三’;
      auser.U_Sex:=’男’;
      auser.U_Birth:=’1970-8-7′;
      auser.U_Tel:=’001654-7890′;
      auser.U_Addr:=’张三 大街 8 号’;
      auser.U_PostCode:=’100018′;
      auser.U_Email:=’zhangsan@888.com‘;
      FXMLOption.ReplaceUser(edit2.Text,auser);
     
    WebBrowser1.Navigate(ExtractFilePath(application.ExeName)+edit1.Text);
    end;
    end.

大致吗。先定义XML文件然后读废除息。

[delphi]  

 

interface

 

 doc : TXMLDocument;  

以上XPATH有误 应改为:
xpath:=UsersTag ‘[@’ U_Id ‘="’ userid ‘"]’;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
  Dialogs,XMLDoc,XMLIntf, StdCtrls;

摘自 苏生-苏米沿的特辑

 rootnode : IXMLNode;  

 

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 chender : IXMLNodeList  

var
  Form1: TForm1;

  

implementation

TXMLDocument是文书档案结构,IXMLNode是文书档案节点,  

{$R *.dfm}

IXMLNodeList是节点群集。  

procedure TForm1.Button1Click(Sender: TObject);
var
Xml: TXMLDocument;
Rootnode,node : IXMLNode;
begin
Xml := TXMLDocument.Create(nil);
// Xml.LoadFromFile(‘aaa.xml’);
try
//加入版本音信 ‘<?xml version=”1.0″ encoding=”GB2312″ ?> ’
Xml.Active := True;
Xml.Version := ‘1.0’;
Xml.Encoding :=’GB2312′;

  

Rootnode := Xml.CreateNode(‘CIF_INFO’);
Xml.DocumentElement := Rootnode;
node := Xml.CreateNode(‘TXNCODE’);
Rootnode.ChildNodes.Add(node);
node.Text := ‘420001’;
node := Xml.CreateNode(‘RESPCODE’);
Rootnode.ChildNodes.Add(node);
node.Text := ‘0000’;
node := Xml.CreateNode(‘CIFID’);
Rootnode.ChildNodes.Add(node);
node.Text := ‘0030209728’;
node := Xml.CreateNode(‘RESCODE’);
Rootnode.ChildNodes.Add(node);
node.Text := ‘0000’;
node := Xml.CreateNode(‘RESMSG’);
Rootnode.ChildNodes.Add(node);
node.Text := ”;

<pre name=”code” class=”delphi”>doc:=TXMLDocument.Create(nil);  

Xml.SaveToFile(‘aaa.xml’);
xml.Active := False;
showmessage(‘创形成功!’);
finally
Xml.Free;
end;
end;

doc.Active:=True;  

procedure TForm1.Button2Click(Sender: TObject);
var
Xml: TXMLDocument;
Rootnode,node : IXMLNode;
nodelist:IXMLNodeList;
b,c,str :string;
i:Integer;
begin
Xml := TXMLDocument.Create(Application);

doc.LoadFromXML(Trim(rectext));  

try
Xml.LoadFromFile(‘aaa.xml’);
Xml.Active := True;

rootnode:=doc.DocumentElement;  

Rootnode := Xml.DocumentElement;
nodeList :=Rootnode.ChildNodes;
 for i:=0 to nodelist.Count-1 do
    begin
      if  Rootnode.ChildNodes[i].NodeValue = null then
         begin
           c:=’空’;
         end
         else
         begin
           c:= Rootnode.ChildNodes[i].NodeValue;
         end;
      str:=str+c+#13#10;
    end;
//b := Rootnode.ChildNodes[ ‘CIFID’].NodeValue;
Memo1.Lines.Add(str);
xml.Active := False;
finally
Xml.Free;
end;
end;
end.

chender:=rootnode.ChildNodes;</pre><br>  

创立文书档案模型以致幼功点与子节点集结。<br>  

<br>   www.2cto.com

<pre name=”code” class=”delphi”>  
//mmoRecod.Lines.Add(rootnode.Text);  

      SetLength(files,chender.Count);  

      for I := 0 to chender.Count-1 do  

      begin  

        mmoRecod.Lines.Add(chender[i].Attributes[‘name’]);  

        filetemp:=FileObj.Create;  

        filetemp.name:= chender[i].Attributes[‘name’];  

        filetemp.filepath:= chender[i].Attributes[‘path’];  

        filetemp.filetype:= chender[i].Attributes[‘type’];  

        filetemp.localpath:= chender[i].Attributes[‘localpath’];  

        files[i]:=filetemp;  

      end;</pre><br>  

下面是对节点相关的操作,基本上与DOM操作意气风发致,方便简单。<br>  

<pre></pre>  

,
导入要求单元,XMLDoc,XMLIntf那四个库文件。 [delphi] doc :
TXMLDocument; rootnode : IXMLNode; chender : IXMLNodeL…

相关文章