2018-03-03 11:15 GMT+01:00 Michael Van Canneyt via Lazarus <lazarus@lists.lazarus-ide.org>: > > Hello, > > The package .lpk andproject .lpi file use the following format : > > <Units Count="241"> > <Unit0> > <Filename Value="lazarus.pp"/> > <IsPartOfProject Value="True"/> > <UnitName Value="Lazarus"/> > </Unit0> > <Unit1> > <Filename Value="frames/oi_options.pas"/> > <IsPartOfProject Value="True"/> > <ComponentName Value="OIOptionsFrame"/> > <HasResources Value="True"/> > <ResourceBaseClass Value="Frame"/> > </Unit1> > > > And similarly > <RequiredPackages Count="7"> > <Item1> > <PackageName Value="LazDebuggerGdbmi"/> > </Item1> > <Item2> > <PackageName Value="LCLBase"/> > <MinVersion Major="1" Release="1" Valid="True"/> > </Item2> > > > Is it possible to get rid of the counts ? > > Reason: if 2 people add files to a package/project, it always creates > conflicts when updating from the VCS. And if you're in bad luck, you need to > change a lot of items. > > On the other hand, if you do > <RequiredPackages> > <Package name="LazDebuggerGdbmi"/> > <Package name="LCLBase"> > <MinVersion Major="1" Release="1" Valid="True"/> > </Package> > > The chance of conflicts becomes less, and the resolution easier. >
I am guessing the Count="xxx" attribute, and the numeric suffixes to <Unit1> , <Item1> are there to read and write these files using TXMLConfig class. Using TXMLConfig exposes an easy API to work with XML files, but it limits what you can do --- all the children nodes within the same parent must have a different name, so that you can do File1 := XmlConfig.GetValue('Units /Unit1/FileName/Value'); File2 := XmlConfig.GetValue('Units /Unit2/FileName/Value'); .... In Castle Game Engine, we added some extensions to TXMLConfig, in particular TCastleConfig.PathElement to address exactly this. It extracts a DOM element (TDOMElement) from TXMLConfig, and then you can use full power of the DOM unit to operate on this element (iterate on children etc.): https://github.com/castle-engine/castle-engine/blob/master/src/files/castlexmlconfig.pas#L258 . This way you can still use TXMLConfig API (GetValue / SetValue) for some tasks, but you can switch to using more powerful DOM API for other tasks. I thought maybe this is helpful :) Regards, Michalis -- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus