转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi与XML         ★★★★

Delphi与XML

作者:闵涛 文章来源:闵涛的学习笔记 点击数:914 更新时间:2009/4/23 18:37:55

////////////////////////////////////////////////////////////////////////
创建IXMLDOMDocument对象的三种方法:
(1)[方法1] 直接创建 IXMLDOMDocument  , 例(1)
   uses msxml;
   var DOC:IXMLDOMDocument;
   doc := CoDOMDocument.create;
   .....
   Doc := nil;
 A)doc.load(''''C:\temp.xml'''');  //从文件载入
 B) 动态创建

   var aElement,aElement2: IXMLDOMElement;  // [ aNode:IXMLDOMNode ==>  .AppendChild() ]

   //加入版本信息 ‘<?xml version="1.0" ?> ’
   doc.AppendChild(doc.CreateProcessingInstruction(''''xml'''', ''''version="1.0" encoding="GB2312"''''));
     (*)因为此函数返回结果不包含 ''''encoding="GB2312"'''' 故须保存前注意.
   //加入根结点
   doc.AppendChild(doc.CreateElement(''''bootDocNode'''')); //// == aElement 
   //加入子结点
   aElement:=IXMLDOMElement(Doc.DocumentElement.AppendChild(Doc.CreateElement(''''ChileNode1'''')));
   //设置接点属性
   aElement.SetAttribute(''''ID'''', ''''11'''');
   aElement.SetAttribute(''''Units'''', ''''元/m2'''');
   //设置结点内容
   aElement.AppendChild(Doc.CreateTextNode(''''结点内容''''));
   //子结点添加子结点
   aElement2:=IXMLDOMElement(aElement.AppendChild(Doc.CreateElement(''''Child_ChileNode1'''')));

(2) [方法2] 直接创建 IXMLDocument ( 不是IXMLDOMDocument )
  uses XMLIntf,XMLDoc;
  var xmlDoc:IXMLDocument; aNode:IXMLNode;  s:string;

  xmlDoc := TXMLDocument.Create(nil);
  try
    //加入版本信息 ‘<?xml version="1.0" encoding="GB2312" ?> ’
    xmlDoc.Active := True;   xmlDoc.Version := ''''1.0'''';  xmlDoc.Encoding :=''''GB2312'''';
    //加入根结点
    aNode:=xmlDoc.AddChild(''''bootDocNode'''');
    //加入子结点
    aNode:=aNode.AddChild(''''ChileNode1'''');
    //设置接点属性
    aNode.SetAttribute(''''ID'''', ''''22'''');
    aNode.SetAttribute(''''Units'''', ''''元/m2'''');
    //设置结点内容
    aNode.Text := ''''结点内容'''';
    //子结点添加子结点
    aNode:=aNode.AddChild(''''Child_ChileNode1'''') ;
    aNode.Text := ''''Child_ChileNod内容'''';
  
    s := xmlDoc.XML.Text ;  //  .XML 返回的是 Tstrings
  finally
    xmlDoc := nil ;
  end;

(3)利用 XMLDataBinding
    I) 准备好XML文件,此XML文件有较强的代表性,保证程序中所用的结点及其关系都存在
   II)利用 file-->new-->XML Data Binding
  III)创建XML对象
   A)v:string; //XML文件内容
    Doc : IXMLBudgetDocTyp; //IXMLBudgetDocTyp是XML文件的根结点
    Doc := LoadXMLData(v).GetDocBinding(''''BudgetDoc'''', TXMLBudgetDocType) as IXMLBudgetDocType;
   B)Doc := LoadBudgetDoc(''''C:\temp.xml'''');
  IV) 应用
    Doc.ChildNodes.FindNode(''''Docfile'''') as IXMLDocfileType;

(4)利用TXMLDocument控件
    XMLDocument1.fileName:=''''C:\temp.xml'''';
    XMLDocument1.active:=true;  // XMLDocument1 相当于 Doc

(5)XML对象的其他方法
   IXMLNodeList.FindNode(NodeName: DOMString): IXMLNode;
   IXMLNodeList.FindNode(NodeName, NamespaceURI: DOMString): IXMLNode;
   IXMLNodeList.FindNode(ChildNodeType: TGuid): IXMLNode;
   IXMLNodeList.FindSibling(const Node: IXMLNode; Delta: Integer): IXMLNode;
   IXMLNodeList.First: IXMLNode;
   IXMLNodeList.Last: IXMLNode;
   ... ...
   
////////////////////////////////////////////////////////////////////////
//例(1)
uses msxml;  
    doc:IXMLDOMDocument;
    budgetdoc:ixmlDomNode;
    Rela:IxmlDOMNode;
    rs:ixmldomnodelist;

//建立或取得XML结点
  doc := CoDOMDocument.create;
  doc.load(''''C:\temp.xml'''');
  budgetDoc := doc.selectSingleNode(''''BudgetDoc'''');
  rela := budgetdoc.SelectSingleNode(''''Relation'''');

//创建XML子结点 
  if not assigned(rela) then
  begin
    rela :=  doc.createElement(''''Relation'''');
    rela.setAttribute(''''BudgetId'''',0);
    rela.setAttribute(''''name'''',''''名称'''');
    budgetdoc.appendChild(rela);
  end;

//取子结点(序列)
  rs := rela.selectNodes(''''Rela[@BudgetId="2" and @TaskId="8"]'''');
  for i := 0 to rs.length -1 do
  begin
    s:= s + rs[i].attributes.getnameditem(''''NewRate'''').nodeValue;
  end;
 
  rela:=doc.ChildNodes.FindNode(''''DOMNode'''') as IxmlDOMNode;

//移除子结点
    for i := rs.length -1 downto 1 do
      rela.removeChild(rs[i])

//取父结点
    if assigned(anode.parentNode) and (Anode.parentNode.nodeName=''''Task'''') then
      result := Anode.parentNode;

//取属性
  DOC.DocumentElement.Attributes[''''Name'''']
  rela.Attributes[''''Name'''']
  rs.Nodes[i].Attributes[''''Name'''']

  Ajob:ixmldomnode;jobs:ixmldomNodeList;
  jobs := Ajob.selectNodes(''''RCJ[@Attrib="''''+AAttrib+''''"]'''')


[Web开发]XML与HTML在语法上的主要区别详解  [系统软件]如何让Expat支持中文XML
[VB.NET程序]vb.net 与 XML 的操作  [VB.NET程序]vb.net读写xml(2)--实现datagrid与xml的沟通(原创…
[VB.NET程序]vb.net 读写xml方法(1)  [VB.NET程序][VB.NET+XML]完成简单程序配置
[VB.NET程序]使用Visual Basic操纵XML文档  [VB.NET程序]XML 简单接口 (SAX2)用Visual Basic 实现的示例
[Delphi程序]Delphi 6 XML映象工具  [Delphi程序]Delphi 6 XML数据绑定
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台