using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.XPath; using System.IO; using System.Xml.Linq; using Wmhelp.XPath2; namespace XmlTest { class Program { static void Main(string[] args) { XmlDocument xDoc = new XmlDocument(); xDoc.Load("..\\..\\..\\vertical.xml"); XmlElement xRoot = xDoc.DocumentElement; XmlNodeList mySearch = xRoot.XPath2SelectNodes("//Object[ends-with(@Name,'_oper')]"); if (mySearch != null) foreach (XmlNode n in mySearch) { Console.WriteLine(n.SelectSingleNode("Attribute").OuterXml); } foreach (XmlNode oper in mySearch) { var operId = oper.XPath2SelectSingleNode("//Attribute[@Name='indexoper']").Attributes["Value"].Value; var operName = oper.XPath2SelectSingleNode("//Attribute[@Name='nameoper']").Attributes["Value"].Value; Console.WriteLine($"{operId} {operName}"); foreach (XmlNode step in oper.XPath2SelectNodes("//Object[ends-with(@Name,'_step')]")) { var stepNum = step.XPath2SelectSingleNode("//Attribute[@Name='numstep']").Attributes["Value"].Value; var stepName = step.XPath2SelectSingleNode("//Attribute[@Name='name']").Attributes["Value"].Value; Console.WriteLine($" {stepNum}. {stepName}"); } } //XmlNodeList childnodes = xRoot.XPath2SelectNodes("//Object[ends-with(@Name,'_oper')], //Object[ends-with(@Name,'_step')]"); //if (childnodes != null) // foreach (XmlNode n in childnodes) // { // Console.WriteLine(n.SelectSingleNode("Attribute").OuterXml); // foreach (XmlNode s in n) // Console.WriteLine // } Console.WriteLine("Press Any Key"); Console.ReadKey(); } } }