static private void XmlToJsonAttributes(XmlNode attributesNode, JsonNode jsonNode, XmlToJsonConverter converter)
 {
     foreach (XmlNode attributeXmlNode in attributesNode.ChildNodes)
     {
         JsonObject layerAttribute = new JsonObject();
         converter.Convert(attributeXmlNode, layerAttribute);
         jsonNode.Add(layerAttribute);
     }
 }
        static private void XmlToJsonSublayers(XmlNodeList sublayersXmlNodes, JsonNode jsonNode, XmlToJsonConverter converter)
        {
            JsonList sublayersJsonNodes = new JsonList();

            foreach (XmlNode sublayerXmlNode in sublayersXmlNodes)
            {
                JsonObject sublayerJsonNode = new JsonObject();
                converter.Convert(sublayerXmlNode, sublayerJsonNode);
                sublayersJsonNodes.Add(sublayerJsonNode);
            }
            jsonNode.Add("sublayers", sublayersJsonNodes);
        }
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("ERROR: Пожалуйста, укажите два параметра командной строки: путь до XML-файла и путь для создания JSON-файла");
                return;
            }

            string xmlPath  = args[0];
            string jsonPath = args[1];

            XmlDocument xmlDocument = new XmlDocument();

            try
            {
                xmlDocument.Load(xmlPath);
            }
            catch (Exception exception)
            {
                Console.WriteLine(string.Format("ERROR: Возникла ошибка при чтении XML-файла: {0}", exception.Message));
                return;
            }


            XmlToJsonConverter converter = new XmlToJsonConverter();

            converter.AddRule(new Rule(IsDocument, XmlToJsonConvertFirstChild));
            converter.AddRule(new Rule(IsCapability, XmlToJsonConvertFirstChild));
            converter.AddRule(new Rule(IsLayer, XmlToJsonLayer));
            converter.AddRule(new Rule(IsAttributes, XmlToJsonAttributes));
            converter.AddRule(new Rule(IsAttribute, XmlToJsonAttribute));

            JsonObject jsonObject = new JsonObject();

            converter.Convert(xmlDocument, jsonObject);

            File.WriteAllText(jsonPath, jsonObject.GetAsString());
        }
 static private void XmlToJsonConvertFirstChild(XmlNode xmlNode, JsonNode jsonNode, XmlToJsonConverter converter)
 {
     converter.Convert(xmlNode.FirstChild, jsonNode);
 }