static void Main(string[] args) { try { string path = string.Empty; string xpath = string.Empty; Console.OutputEncoding = utf8; //removed input encoding utf8 because character like "é" are treated like "\0" when entered in cmd and in windows terminal. //Console.InputEncoding = utf8; NamespaceHelper.Instance.LoadNamespaces(); if (args.Length > 0) { path = args[0]; _startWithParameter = true; } DisplayHelp(); #region "file mode" while (true) { CConsole.Write("File path > ", MODE_COLOR); if (_startWithParameter) { CConsole.WriteLine(path); _startWithParameter = false; } else { path = Console.ReadLine(); } path = path.Trim(CommandHelper.TRIMMABLE.ToCharArray()); if (string.IsNullOrWhiteSpace(path)) { continue; } if (CommandHelper.IsExitKeyword(path) || CommandHelper.IsExitAllKeyword(path)) { break; } if (CommandHelper.IsHelpKeyword(path)) { DisplayHelp(); continue; } if (CommandHelper.IsNamespacesCommand(path)) { EExitMode nsExitMode = new NamespaceMgtMode().Start(); //if (nsExitMode == EExitMode.ExitMode) continue; if (nsExitMode == EExitMode.ExitApplication) { break; } //use continue for EExitMode.None (is usefull ?) and EExitMode.ExitMode continue; } if (!File.Exists(path)) { CConsole.WriteLine($"Path '{path}' doesn't exists!", ConsoleColor.Red); CConsole.WriteLine(); continue; } try { XmlDocument doc = new XmlDocument(); doc.Load(path); Console.WriteLine(); XPathMode mode = new XPathMode(doc); EExitMode exitMode = mode.Start(); if (exitMode == EExitMode.ExitApplication) { break; } } catch (XmlException ex) { CConsole.WriteLine("Error when loading file!", ConsoleColor.Red); CConsole.WriteLine($"Message: {ex.Message}", ConsoleColor.Red); Console.WriteLine(); } } #endregion "file mode" } catch (Exception ex) { CConsole.WriteLine(ex.ToString(), ConsoleColor.Red); CConsole.WriteLine(); CConsole.WriteLine("Press a key to exit ..."); Console.ReadKey(); } }
public EExitMode Start() { Console.WriteLine(); DisplayHelp(); while (true) { string prompt = "Namespaces > "; if (_hasModificationsNotSaved) { prompt = "Namespaces * > "; } CConsole.Write(prompt, MODE_COLOR); command = Console.ReadLine(); if (string.IsNullOrWhiteSpace(command)) { continue; } if (CommandHelper.IsExitAllKeyword(command)) { _exitMode = EExitMode.ExitApplication; break; } if (CommandHelper.IsExitKeyword(command)) { _exitMode = EExitMode.ExitMode; break; } if (CommandHelper.IsHelpKeyword(command)) { DisplayHelp(); continue; } if (CommandHelper.IsNsDisplayCommand(command)) { DisplayCustomNamespaces(); continue; } if (CommandHelper.IsNsAddCommand(command)) { AddNamespace(command); continue; } if (CommandHelper.IsNsDeleteCommand(command)) { DeleteNamespace(command); continue; } if (CommandHelper.IsNsSaveCommand(command)) { SaveNewNamespaces(); continue; } } return(_exitMode); }
public EExitMode Start() { Console.WriteLine("DocumentElement:"); Console.WriteLine(_document.DocumentElement.OuterXml); Console.WriteLine(); AddDocumentNamespaces(); Console.WriteLine(); string nsPrefix = _nsManager.LookupPrefix(_document.DocumentElement.NamespaceURI); if (string.IsNullOrWhiteSpace(nsPrefix)) { DisplayDefaultNamespaceError(_document.DocumentElement.NamespaceURI); //return EExitMode.ExitMode; } else { DisplayDefaultNamespace(_document.DocumentElement.NamespaceURI, nsPrefix); } DisplayHelp(); XmlNodeList nodeList = null; while (true) { string prompt = "XPath"; _activeColor = XPATH_MODE_COLOR; _workNode = _document.DocumentElement; if (_selectionStatus == ESelectionModeStatus.In) { prompt = "XPath (selection)"; _activeColor = SELECTION_MODE_COLOR; _workNode = _selectedNode; } if (Settings.Default.DisplayCurrentNode) { CConsole.Write($"{prompt} [", _activeColor); CConsole.Write(FormatNodeName(_workNode)); CConsole.Write("] > ", _activeColor); } else { CConsole.Write($"{prompt} > ", _activeColor); } command = Console.ReadLine(); //Gestion de l'entrée utilisateur et des commandes if (string.IsNullOrWhiteSpace(command)) { continue; } if (CommandHelper.IsExitAllKeyword(command)) { _exitMode = EExitMode.ExitApplication; break; } if (CommandHelper.IsExitKeyword(command)) { if (_selectionStatus == ESelectionModeStatus.In) { _selectionStatus = ESelectionModeStatus.None; continue; } _exitMode = EExitMode.ExitMode; break; } if (CommandHelper.IsHelpKeyword(command)) { DisplayHelp(); continue; } if (CommandHelper.IsShowCommand(command)) { DisplayNode(_workNode); CConsole.WriteLine(); continue; } if (CommandHelper.IsSelectCommand(command)) { command = command.Replace(CommandHelper.SELECT_COMMAND, "").TrimStart(); if (string.IsNullOrWhiteSpace(command)) { CConsole.WriteLine($"Usage: {CommandHelper.SELECT_COMMAND} <xpath>", ConsoleColor.Yellow); continue; } if (command == "..") { if (_workNode != _document.DocumentElement) { _selectedNode = _selectedNode.ParentNode; DisplayNode(_selectedNode); } else { CConsole.WriteLine("Can not select parent of the document node", ConsoleColor.Yellow); } continue; } _selectionStatus = ESelectionModeStatus.Entering; } if (CommandHelper.IsNodesCommand(command)) { DisplayChildNodeList(_workNode); continue; } if (CommandHelper.IsAttributesCommand(command)) { DisplayAttributesList(_workNode); continue; } try { nodeList = _workNode.SelectNodes(command, _nsManager); if (_selectionStatus == ESelectionModeStatus.Entering && nodeList.Count != 1) { CConsole.WriteLine("Exiting selection mode. You must select only 1 node!", ConsoleColor.Yellow); Console.WriteLine(); _selectionStatus = ESelectionModeStatus.None; } DisplayNodeList(nodeList, command); if (_selectionStatus == ESelectionModeStatus.Entering && nodeList.Count > 0) { _selectedNode = nodeList[0]; _selectionStatus = ESelectionModeStatus.In; } } catch (XPathException ex) { CConsole.Write("Error with the xpath expression: '", ConsoleColor.Red); CConsole.Write(command); CConsole.WriteLine("'!", ConsoleColor.Red); CConsole.WriteLine($"Message: {ex.Message}", ConsoleColor.Red); Console.WriteLine(); } } //end while return(_exitMode); }