如题 
我用delphi写个程序 
想让他实现读入一个文本文档,当然这个文本文件是有格式的 
读入后将其转换成xml格式的,再把xml格式的文件另存到另一个位置 
请问delphi能否实现这种功能?? 
或者delphi中是否有这种控件的 
最好能实现文本和xml的相互转换 
因为我还需要把xml转换成文本 
在线等答案

解决方案 »

  1.   

     Delphi 中对 XML 文件的解析做的很好,比直接使用 MS 的 MSXML2_TLB 中的接口要方便很多,现称述于下面。 
          在讲之前先给出一个 XML 实例,在讲某些部分是要结合实例比较容易理解。1<?xml version="1.0" encoding="gb2312"?> <!--文档版本信息, 注释格式同 HTML-->
    2<XMLPackage>   
    3  <clinetinfo ip=”202.101.100.90” handler=”si” unit=”江苏网商软件”/>
    4  <data>
    5     <row id=”1” name="太阳" sex=”男” age="24" duty="软件工程师"/>
    6     <row id=”2” name="月亮" sex=”女” age="25" duty="部门经理"/>
    7<!--data 中包含了元素  row 的两个实例,通过属性 id 予以区分 -->
    8  </data>
    9    <memo length=”16” color=” $0034494B”>Hello! I am yaya! </memo> <!-- 这个元素中间包含的内容成为 Text,而且也含有两个属性 length, color, 当然也可以没有属性 -- >
    10   <Actions acition=”update/insert”/> <!—该元素描述了一动作控制信息-->
    11</XMLPackage>      TXMLDocument 控件提供了我们两种常用做法:一、直接用这个类封装的属性和方法来读写 XML 文件,我把它称为自己解析法;二、用控件提供的 XML Data Binding Wizard 来创建一个适合用户自己的接口单元,然后按照这个接口单元提供的许多接口来实现对同类 XML 文件的读写,十分方便,但有局限性,我把它称为控件解析法。我重点讲第一种使用方法。一、自己解析法:      下面我将按创建、读取、修改、添加和删除这五个动作来分三类讲述。      (1)创建和添加:
          首先要创建 XML 实例,可以这样动态创建:
          TXMLDocument.Create(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);      也可以这样动态创建:
          Xml:= TXMLDocument.Create(nil);
          Xml. LoadFromFile(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);       当然也可以从 Internet 面板上拖放一个 TXMLDocument 控件,然后再为 FileName 或 XML 属性赋值,比如对象名仍然叫 xml(下都不说明都这样默认):
          Xml.FileName:= F:\Work\费亚的文件\task\XML\lab_xml\country.xml;      至于它的另一个属性 XML 是用来直接赋 XML 语言,这个用法对我们暂不重要。创建完 XML 实例后要注意打开 Active 属性:
          Xml.active:=true;      这样下面对文件的读写操作才有效。如果没有 XML 文件可以用来创建 XML 的实例,即要建立 XML 文件,可以选择在上面一句之后,对 XML 实例操作,操作完毕之后加上:
          Xml.SaveToFile(‘F:\Work\费亚的文件\task\XML\lab_xml\country.xml’);      下面就是创建节点了,需要结合上面的 XML 文件实例来讲述。首先一个 XML 文件只能有一个根节点,比如文件实例中2行的 XMLPackage 是这样被创建的:
          Var rootnode:XMLNode;
          Rootnode:=xml.CreateNode(‘XMLPackage’);
          Xml. DocumentElement:=rootnode;      接着我们创建不同类型的子节点,前面的实例中的第9行的节点比较有代表性,它是一个带有文本的子节点,同时又带有两个属性节点,我们来看看它是怎么被创建的,首先创建一个根节点:
          xml.Active:=true;
          xml.DocumentElement:=xml.CreateNode(''''XMLPacage'''');      接着我们创建 memo 子节点:
          Var node:IXMLNode;
          node:=xml.CreateNode(''''memo'''');
          xml.DocumentElement.ChildNodes.Add(node);      这种创建儿子节点的方法比较好,当然还可以:
          xml.DocumentElement.AddChild(''''XMLPacage'''');      来创建,建议使用第一种,CreateNode 方法的用法是很丰富的,主要看它的第二个参数,上面其实是用了默认参数,下面我再看看怎样创建这个子节点的文本的:
          node.ChildNodes.Add(xml.CreateNode(''''Hello! I am yaya!'''',ntText));      注意 CreateNode 方法的第二个参数,我们继续看属性是怎么创建的:
          node.AttributeNodes.Add(xml.CreateNode(''''length'''',ntAttribute));
          node.SetAttribute(''''length'''',16);
          node.AttributeNodes.Add(xml.CreateNode(''''color'''',ntAttribute));
          node.SetAttribute(''''color'''',$0034494B);      最后别忘了保存哦:
          xml.SaveToFile(''''F:\Work\费亚的文件\task\XML\lab_xml\test.xml'''');
          xml.Active:=false;      到此我们就结束了创建,至于添加,即插入节点,要插在指定节点后将上面的 add(const Node:       IXMLNode)方法换成 Insert(Index: Integer; const Node: IXMLNode),其它用法也就一目了然,不再详述了。      (2)读取和修改      读取比较简单,主要是读取子节点的文本和属性值,方法是比较简单,关键就是要利用 IXMLNodeList 接口来提供的一些属性和方法来循环搜索到指定节点就 OK 了。文本和属性值的读取方法在 delphi 中提供的方法有很多,我就讲一种:NodeValue 属性,它是 IXMLNode 接口的一个属性,它的值是 OleVariant 类型,意味着我们在 XML 文件里虽然都是存的字符串,但 delphi 会帮我们来转换数据格式,比如有个属性节点叫 node:
          Node.NodeValue:=16;//16是 integer 类型      虽然在 XML 文件中保存的是 ASCII 格式的16,但当我们要读取的时候 delphi 还会帮我们换回来的,只要这样就可以了:
          Var len:integer;
          Len:=node.NodeValue;      当然我们要注意的就是,用这种方法读取的时候最好先查看同一节点的 NodeType 属性,因为有几种类型的节点避免发生异常。
          上面讲的都是读和写节点的值,有时候也要读和写节点名,就要访问 NodeName 属性,使用方法大概相同,也要结合 NodeValue 来使用:
          读取就完了,当然我们上面是通过接口的属性来做的,接口也有方法来完成,就不说了,对上面的几个属性都是可读可写的,所以修改也基本清楚了。      (3)删除       删除主要给出了删除指定节点,主要是看 IXMLNodeList 接口的几个方法,Clear 和 Delete 方法,其中前一个是全部清空,后一个是删除指定的子节点,这个方法是重载的,可以按名字也可以按顺序号,即 Count 属性,非常方便!