#undef FALSE #define TRUE #define USE_NAMESPACE using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.XPath; using System.Xml; namespace WindowsPerformanceReview { // Class and method to test XPath select expressions. class Test { public static String test() { String xml = "100224002340x80000000000100003Microsoft-Windows-Diagnostics-Performance/OperationalDDCJX4K122010-04-17T15:29:25.671600300Z2010-04-17T15:32:12.929094600Z321109877188729193030993547731453593601145332413710039100false0094538899453889truetruetrue048988true56002932068428116151823134579208138286224911468384518"; StringBuilder sb = new StringBuilder(); sb.AppendLine("Test XPath Navigation"); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); #if USE_NAMESPACE // Assign a short prefix for the namespace. XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable); namespaceManager.AddNamespace("e", "http://schemas.microsoft.com/win/2004/08/events/event"); #endif XmlElement element = doc.DocumentElement; XmlNode firstChild = doc.FirstChild; XmlNode lastChild = doc.LastChild; XmlNodeList childNodes = doc.ChildNodes; String name = doc.Name; sb.AppendLine("element.Name=" + element.Name); sb.AppendLine("firstChild.Name=" + firstChild.Name); sb.AppendLine("lastChild.Name=" + lastChild.Name); sb.AppendLine("element.Count=" + childNodes.Count); sb.AppendLine(); XPathNavigator nav = doc.CreateNavigator(); String[] exprs = { "*", "/*", "//*", "/Event", "//Event", "/Event/EventData", "*/Event/EventData", "*[System/Level=2]", "//Data", "/e:Event/e:EventData/e:Data[@Name=BootTime]", "/e:Event/e:EventData", "*/e:Event/e:EventData", "/e:Event/e:EventData/e:Data", "/e:Event/e:EventData/e:Data[@Name='BootTime']", "//e:Data[@Name=BootTime]", }; int count; XPathNodeIterator iter; foreach (String expr in exprs) { #if USE_NAMESPACE iter = nav.Select(expr, namespaceManager); #else iter = nav.Select(expr); #endif count = iter.Count; sb.AppendLine("expr=" + expr + " count=" + count); } sb.AppendLine("End Test"); return sb.ToString(); } #if FALSE ///////////////////////////////////////////////////////////////////// // Main ///////////////////////////////////////////////////////////////////// static void Main(String[] args) { Console.WriteLine(Test.test()); } #endif } }