DFM文件与XML文件互转

2016-02-19 12:48 15 1 收藏

今天图老师小编要跟大家分享DFM文件与XML文件互转,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  dfm文件是Delphi中存储窗体控件信息的,有时为了对大批量的dfm文件操作(如:批量替换控件、作检查等),往往不是太方便。
  XML对结构化的数据读写则很强,将文本类型的dfm转为xml后进行操作,再转回dfm存储大大方便了操作。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
//DFM to XMLprocedure Dfm2Xml(ADfmStrings: TStrings; AXml: IDsXmlDocument);Var  i: integer;  mStr : string;  mParentNode, mNode : IDsXMLNode;  mObjName, mClass, mObjType: string;  mPropName, mPropValue: string;  mInItem: Boolean;   //有Item的也会有End相对,所以要和Object end分开begin  mInItem := False;  mParentNode := AXML;  for i:=0 to ADfmStrings.Count - 1 do  beginmStr := trim(ADfmStrings.Strings[i]);//对象开始if (copy(mStr, 1, 6) = 'object') or (copy(mStr, 1, 9) = 'inherited') thenbegin  //先写入属性 - 如果还有属性没有写  if mPropName  '' then  beginmNode := AXml.createElement(mPropName);mNode.text := mPropValue;mParentNode.appendChild(mNode);mPropName := '';  end;  mObjType := CutToken(mStr, ' ');  //Type: object or inherited  mObjName := CutToken(mStr, ': '); //ObjName: Ex. frmCmsI03  mClass := mStr;//ClassName: Ex. TButton  mNode := AXml.createElement(mObjName);  (mNode as IDsXmlElement).setAttribute('ObjType', mObjType);  (mNode as IDsXmlElement).setAttribute('Class', mClass);  mParentNode.appendChild(mNode);  mParentNode := mNode;end//对象结束else if (mStr = 'end') and (not mInItem) thenbegin  //先写入属性  if mPropName  '' then  beginmNode := AXml.createElement(mPropName);mNode.text := mPropValue;mParentNode.appendChild(mNode);mPropName := '';  end;  mParentNode := mParentNode.parentNode;end//属性处理elsebegin  //有 = 说明是一个属性的新的开始  if (Pos(' = ', mStr)  0) and (not mInItem) then  begin//先写入属性if mPropName  '' thenbegin  mNode := AXml.createElement(mPropName);  mNode.text := mPropValue;  mParentNode.appendChild(mNode);end;mPropName := CutToken(mStr, ' = ');mPropValue := CutToken(mStr, ' = ');  end  else   //说明这个属性可能有多行mPropValue := mPropValue + '#13#10' + mStr;if mStr = 'item' then mInItem := True;if mStr = 'end' then mInItem := False;end;  end;end;//XML to DFMprocedure Xml2Dfm(AXml: IDsXmlDocument; ADfmStrings: TStrings);  procedure Node2Dfm(ANode: IDsXMLNode; oString: TStrings; IdentSpace: string);  VarmObjName, mClass, mObjType: string;mPropName, mPropValue: string;mNode : IDsXMLNode;i: integer;mVar : Variant;  beginmObjName := (ANode as IDsXmlElement).NodeName;mClass   := (ANode as IDsXmlElement).getAttribute('Class');mObjType := (ANode as IDsXmlElement).getAttribute('ObjType');//写入Object beginoString.Add(Format('%s%s %s: %s', [IdentSpace, mObjType, mObjName, mClass]));//写入属性for i:= 0 to ANode.childNodes.length - 1 dobegin  mNode := ANode.childNodes.item[i];  //Has Child 说明是一个新的对象  mVar := (mNode as IDsXmlElement).getAttribute('ObjType');  if not varIsNull(mVar)  thenNode2Dfm(mNode, oString, IdentSpace + '  ')  //是属性,写进去就好了.  else  beginmPropName := mNode.nodeName;mPropValue := mNode.text;mPropValue := StringReplace(mPropValue, '#13#10', #13#10, [rfReplaceAll]);//写入:缩进oString.Add(Format('%s%s = %s', [IdentSpace+'  ', mPropName, mPropValue]));  end;end;//写入EndoString.Add(Format('%send', [IdentSpace]));  end;  begin  Node2Dfm(AXml.Get_documentElement, ADfmStrings, '');end;

  用到的类型:

uses   MSXML2_TLB;//类型自己重新定义过type  IDsXmlDocument = IXMLDOMDocument2;  IDsXmlNode = IXMLDOMNode;  IDsXmlElement  = IXMLDOMElement;  IDsXmlNodeList = IXMLDOMNodeList;

来源:http://www.tulaoshi.com/n/20160219/1601983.html

延伸阅读
标签: Web开发
简单的XML操作:XML文件创建 把下面的代码复制到按钮事件中编译执行后可在相应物理路径中产生Pos.xml文件 以下为引用的内容: XmlTextWriter xtw = new XmlTextWriter(Request.PhysicalApplicationPath + "Pos.xml",System.Text.Encoding.UTF8); xtw.Formatting = Formatting.Indented; xtw.WriteStartDocument(false); //结果: xtw.WriteCo...
标签: Web开发
在所有现代浏览器中,可能够查看原始的 XML 文件。 不要指望 XML 文件会直接显示为 HTML 页面。 查看 XML 文件 查看这个 XML 文件:note.xml 打开 XML 文件 - XML 文档将显示为代码颜色化的根以及子元素。通过点击元素左侧的加号或减号,可以展开或收起元素的结构。如需查看不带有 + 和 - 符号的源代码,请从浏览器...
标签: Web开发
下面是通过读取xml文件中的内容并显示在textbox的例子: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.U...
标签: Web开发
项目兼容需要生成一系列的XML文件,总结了下XML文件的生成基本方式 XmlTextWriter w = new XmlTextWriter("C:XML文件名.xml", Encoding.Unicode); //Encoding.Unicode为生成XML文件的编码格式,到时候合输出:?xml version="1.0" encoding="utf-16"? w.Formatting = Formatting.Indented; // 这个比较重要,这个属性说明xml文件里面的内容是...
标签: ASP
  概述     本文讲解了一个使用XML技术上传文件的例子,使用该方法没有传统方法中的种种限制。 这个例子讲述了如何使用MSXML3.0和ADO Stream对象来实现这种新的上传方法。好处有很多,比如,不需要专用的上传组件。 引言     为了在HTML网页中获得上传功能,在客户端我们可以使用如下格式的FORM: <F...

经验教程

750

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部