Mega Code Archive

 
Categories / Delphi / XML
 

INI to XML

Title: INI to XML Question: 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 (default) or 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;