0 Replies Latest reply on Nov 27, 2018 8:51 AM by Jerome De San Nicolás

    Sorting Materials in c#

    Jerome De San Nicolás

      Hi,

      I have seen some post complaining on the impossibility to sort the material database by name.

      As I'm learning the c# I've make a little code to sort the database that I want to share with you.

      It seems to work correctly but the process is kind of wanky. (you have to rename files extensions )

       

      Be sure to make a BACKUP before testing as I'm a noob developer. And to leave a feedback on what could I improve.

       

      Tanks

       

      Ps the code :

       

      using System.Linq;
      using System.Xml.Linq;
      
      
      namespace SortXlm
      {
      class Program
      {
      static void Main(string[] args)
      {
      //Open the xml doc
      XDocument doc = XDocument.Load("C:\\NAME OF THE BASE.XML");
      //you have to change the extention of the material batabase from .sldmat to .xml (MAKE BACKUP!)
      
      
      //sort the stuff
      SortByName(doc.Root);
      
      
      //save xml in another file
      doc.Save("C:\\NEW SORTED XML.xml");
      //you have to change the extention of the material batabase from .xml to .sldmat and put the file in the library directory
      }
      
      
      static void SortByName(XContainer container)
      
      {
      container.ReplaceNodes(
      from childEl in container.Elements()
      orderby childEl.Attributes("name").Select(a => a.Value).FirstOrDefault()
      select childEl
      );
      
      
      foreach (XElement childEl in container.Elements().Where(e => e.HasElements))
      {
      if (childEl.Name == "classification" || childEl.Name == "material")
      {
      SortByName(childEl);
      }
      }
      }
      }
      }