INI - converter arquivos ini para xml

Top  Previous  Next

Question/Problem/Abstract:

 

INI was the old way to store settings (outside the registry), now everything is XML. This routine will convert an INI file into an XML node of a document. 

Answer:

 

 

An XML node is part of an XML Document.  So if you have a new XMLDocument then just add a single node (AddChild) and that is the DocumentNode, then you could pass the DocumentNode to this routine.  If you pass in different Nodes then you could store multiple INI files in the same XML document, even if they have section and value name collisions.  The AsAttributes parameter determines if the values are stored as Attributes (defaultor sub-nodes.   

 

uses XMLIntf, XMLDoc, INIFiles; 

 

procedure INI2XML(const pINIFileName: string; const pXML: IXMLNode; 

                  const AsAttributes: Boolean = true); 

var 

  lINIFile: TIniFile; 

  lSections, lItems: TStringList; 

  iSections, iItems: integer; 

  lNode: IXMLNode; 

begin 

  lINIFile := TIniFile.Create(pINIFileName); try 

  lSections := TStringList.Create; try 

  lItems := TStringList.Create; try 

 

  lINIFile.ReadSections(lSections); 

 

  for iSections := 0 to pred(lSections.Count) do 

  begin 

    lItems.Clear; 

    lINIFile.ReadSection(lSections[iSections],lItems); 

    lNode := pXML.AddChild(StringReplace(lSections[iSections],' ','',[rfReplaceAll])); 

    for iItems := 0 to pred(lItems.Count) do 

    begin 

      if AsAttributes then 

        lNode.Attributes[lItems[iItems]] := 

          lINIFile.ReadString(lSections[iSections],lItems[iItems],''

      else 

        lNode.AddChild(lItems[iItems]).Text := 

          lINIFile.ReadString(lSections[iSections],lItems[iItems],''); 

    end

    lNode := nil; 

  end

 

  finally lItems.Free; end

  finally lSections.Free; end

  finally lINIFile.Free; end

end