/// <summary> /// Creates a XSTL-based ISO Schematron validator. /// </summary> /// <remarks> /// <para> /// The purpose is to precompute the XSTL in order to validate then /// many XML documents using the same schema. /// </para> /// <para> /// The performance of this method in not that interesing. /// </para> /// </remarks> /// <param name="xSchema">Schematron schema for validation</param> /// <returns>Schematron validator with a precomputed XSLT transform</returns> public static Validator Create(XDocument xSchema) { Validator validator = new Validator(); XslCompiledTransform xsl1 = LoadXsl("iso_dsdl_include.xsl"); XslCompiledTransform xsl2 = LoadXsl("iso_abstract_expand.xsl"); XslCompiledTransform xsl3 = LoadXsl("iso_svrl_for_xslt1.xsl"); XmlDocument xDoc0 = new XmlDocument(); xDoc0.LoadXml(xSchema.ToString()); XmlDocument xDoc1 = Transform(xsl1, xDoc0); XmlDocument xDoc2 = Transform(xsl2, xDoc1); XmlDocument xDoc3 = Transform(xsl3, xDoc2); validator.xslTranform = new XslCompiledTransform(); validator.xslTranform.Load(xDoc3); return validator; }
private static Validator CreateWithMeasurement(XDocument xSchema) { Validator validator = new Validator(); XslCompiledTransform xsl1 = LoadXsl("iso_dsdl_include.xsl"); XslCompiledTransform xsl2 = LoadXsl("iso_abstract_expand.xsl"); XslCompiledTransform xsl3 = LoadXsl("iso_svrl_for_xslt1.xsl"); int iterationCount = 1000; Console.WriteLine("Action description: Create XSLT validator"); Console.WriteLine("Number of iterations: {0}", iterationCount); Stopwatch stopWatch = new Stopwatch(); stopWatch.Reset(); stopWatch.Start(); for (int i = 0; i < iterationCount; i++) { XmlDocument xDoc0 = new XmlDocument(); xDoc0.LoadXml(xSchema.ToString()); XmlDocument xDoc1 = Transform(xsl1, xDoc0); XmlDocument xDoc2 = Transform(xsl2, xDoc1); XmlDocument xDoc3 = Transform(xsl3, xDoc2); validator.xslTranform = new XslCompiledTransform(); validator.xslTranform.Load(xDoc3); } stopWatch.Stop(); float avgTime = stopWatch.ElapsedMilliseconds / (float)iterationCount; Console.WriteLine("Total time: {0} ms", stopWatch.ElapsedMilliseconds); Console.WriteLine("Average time: {0} ms", avgTime); Console.WriteLine("Throughput: {0} / sec", 1000 / avgTime); Console.WriteLine(); return validator; }