private void ProcessXmlFile(string inputFileName, string xsltFileName, string outputFileName) { Processor processor = new Processor(true); Xslt30Transformer transformer = processor.NewXsltCompiler().Compile(new Uri(Path.GetFullPath(xsltFileName))).Load30(); Serializer serializer = new Serializer(); StreamWriter writer = new StreamWriter(outputFileName); serializer.SetOutputWriter(writer); using (FileStream fileStream = new FileStream(inputFileName, FileMode.Open)) { transformer.ApplyTemplates(fileStream, serializer); } writer.Close(); using (XmlReader reader = XmlReader.Create(outputFileName)) { SyndicationFeed feed = SyndicationFeed.Load(reader); listBoxTodoList.ItemsSource = feed.Items; } }
/// <summary> /// you shoud have xml subfolder with camt2Html.xsl and one or more iso20022 xml bank statements files /// app will transform all xml to BetterBankStatements.html /// simply edit xls file to change html result /// </summary> /// <param name="args"></param> static void Main(string[] args) { if (args.Length == 0) { string myPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string sourceFile = myPath + @"\xml\camt2Html.xsl"; string stylesheet = myPath + @"\xml\camt2Html.xsl"; string outputFile = myPath + @"\xml\BetterBankStatements.html"; try { // Create a Processor instance. Processor processor = new Processor(); // Load the source document DocumentBuilder builder = processor.NewDocumentBuilder(); builder.BaseUri = new Uri(sourceFile); XdmNode input = builder.Build(File.OpenRead(sourceFile)); // Create a transformer for the stylesheet. XsltCompiler compiler = processor.NewXsltCompiler(); compiler.BaseUri = new Uri(stylesheet); Xslt30Transformer transformer = compiler.Compile(File.OpenRead(stylesheet)).Load30(); // Set the root node of the source document to be the global context item transformer.GlobalContextItem = input; // Create a serializer, with output to the standard output stream Serializer serializer = processor.NewSerializer(); serializer.SetOutputStream(new FileStream(outputFile, FileMode.Create, FileAccess.Write)); // Transform the source XML and serialize the result to the output file. transformer.ApplyTemplates(input, serializer); Console.WriteLine("\nOutput written to " + outputFile + "\n"); } catch (Exception ex) { Console.WriteLine("\nError:" + ex.Message + "\n"); Console.WriteLine(ex.StackTrace + "\n"); } } else { Console.WriteLine("izpiski (xml iso20022) morajo bit v podmapi xml skupaj z camt2Html.xsl"); Console.WriteLine("retultat bo izpiski.html"); } Console.ReadKey(); }
public void LoadXslt([NotNull] Stream xslt) { if (xslt == null) throw new ArgumentNullException(nameof(xslt)); var errorList = new ArrayList(); _xsltCompiler.ErrorList = errorList; try { var xsltExecutable = _xsltCompiler.Compile(xslt); _xslt30Transformer = xsltExecutable.Load30(); } catch(Exception ex) { var errors = from StaticError se in errorList select new ErrorMessage(se.Message, se.LineNumber, se.ColumnNumber); throw new XsltException("Error loading XSLT.", ex, errors); } }
static void Main(string[] args) { Processor processor = new Processor(true); Xslt30Transformer transformer = processor.NewXsltCompiler().Compile(new Uri(Path.GetFullPath("XSLTFile.xslt"))).Load30(); Serializer serializer = new Serializer(); StreamWriter writer = new StreamWriter("result.html"); serializer.SetOutputWriter(writer); using (FileStream fileStream = new FileStream("books.xml", FileMode.Open)) { transformer.ApplyTemplates(fileStream, serializer); } writer.Close(); }
static void Transforma() { /* cria uma instancia do processador */ Processor processor = new Processor(); /* carrega o documento a ser processado */ XdmNode input = processor.NewDocumentBuilder().Build(new Uri(pathXtm)); /* cria o transformer com o stylesheet informado */ Xslt30Transformer transformer = processor.NewXsltCompiler().Compile(new Uri(pathXsl)).Load30(); transformer.BaseOutputURI = "file:///" + Directory.GetCurrentDirectory().Replace("\\", "/"); //String outfile = Directory.GetCurrentDirectory() + "\\Saida"; Serializer serializer = processor.NewSerializer(); //serializer.SetOutputStream(new FileStream(outfile, FileMode.Create, FileAccess.Write)); transformer.ApplyTemplates(input, serializer); }
public void LoadXslt([NotNull] Stream xslt) { if (xslt == null) { throw new ArgumentNullException(nameof(xslt)); } var errorList = new ArrayList(); _xsltCompiler.ErrorList = errorList; try { var xsltExecutable = _xsltCompiler.Compile(xslt); _xslt30Transformer = xsltExecutable.Load30(); } catch (Exception ex) { var errors = from StaticError se in errorList select new ErrorMessage(se.Message, se.LineNumber, se.ColumnNumber); throw new XsltException("Error loading XSLT.", ex, errors); } }
protected override void runTestCase(XdmNode testCase, XPathCompiler xpath) { TestOutcome outcome = new TestOutcome(this); string testName = testCase.GetAttributeValue(new QName("name")); string testSetName = testCase.Parent.GetAttributeValue(new QName("name")); //// if (testName.Equals("type-0174")) { int num = 0; System.Console.WriteLine("Test driver" + num); } /// if (exceptionsMap.ContainsKey(testName)) { notrun++; resultsDoc.writeTestcaseElement(testName, "notRun", exceptionsMap[testName].GetAttributeValue(new QName("reason"))); return; } if (exceptionsMap.ContainsKey(testName) || isSlow(testName)) { notrun++; resultsDoc.writeTestcaseElement(testName, "notRun", "requires excessive resources"); return; } XdmValue specAtt = (XdmValue)(xpath.EvaluateSingle("(/test-set/dependencies/spec/@value, ./dependencies/spec/@value)[last()]", testCase)); string spec = specAtt.ToString(); Environment env = getEnvironment(testCase, xpath); if (env == null) { resultsDoc.writeTestcaseElement(testName, "notRun", "test catalog error"); return; } /*if(testName("environment-variable")) { * EnvironmentVariableResolver resolver = new EnvironmentVariableResolver() { * public Set<string> getAvailableEnvironmentVariables() { * Set<string> strings = new HashSet<string>(); * strings.add("QTTEST"); * strings.add("QTTEST2"); * strings.add("QTTESTEMPTY"); * return strings; * } * * public string getEnvironmentVariable(string name) { * if (name.Equals("QTTEST")) { * return "42"; * } else if (name.Equals("QTTEST2")) { * return "other"; * } else if (name.Equals("QTTESTEMPTY")) { * return ""; * } else { * return null; * } * } * }; //TODO * } */ // env.processor.SetProperty(JFeatureKeys.ENVIRONMENT_VARIABLE_RESOLVER, resolver); //TODO XdmNode testInput = (XdmNode)xpath.EvaluateSingle("test", testCase); XdmNode stylesheet = (XdmNode)xpath.EvaluateSingle("stylesheet", testInput); XdmNode pack = (XdmNode)xpath.EvaluateSingle("package", testInput); foreach (XdmItem dep in xpath.Evaluate("(/test-set/dependencies/*, ./dependencies/*)", testCase)) { if (!dependencyIsSatisfied((XdmNode)dep, env)) { notrun++; resultsDoc.writeTestcaseElement(testName, "notRun", "dependency not satisfied"); return; } } XsltExecutable sheet = env.xsltExecutable; //ErrorCollector collector = new ErrorCollector(); string baseOutputURI = resultsDir + "/results/output.xml"; ErrorCollector collector = new ErrorCollector(outcome); IList errorList = new List <StaticError> (); XmlUrlResolver res = new XmlUrlResolver(); string xsltLanguageVersion = spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0"; if (stylesheet != null) { XsltCompiler compiler = env.xsltCompiler; compiler.ErrorList = errorList; Uri hrefFile = res.ResolveUri(stylesheet.BaseUri, stylesheet.GetAttributeValue(new QName("file"))); Stream stream = new FileStream(hrefFile.AbsolutePath, FileMode.Open, FileAccess.Read); compiler.BaseUri = hrefFile; compiler.XsltLanguageVersion = (spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0"); foreach (XdmItem param in xpath.Evaluate("param[@static='yes']", testInput)) { String name = ((XdmNode)param).GetAttributeValue(new QName("name")); String select = ((XdmNode)param).GetAttributeValue(new QName("select")); XdmValue value; try { value = xpath.Evaluate(select, null); } catch (Exception e) { Console.WriteLine("*** Error evaluating parameter " + name + ": " + e.Message); //throw e; continue; } compiler.SetParameter(new QName(name), value); } try { sheet = compiler.Compile(stream); } catch (Exception err) { Console.WriteLine(err.Message); //Console.WriteLine(err.StackTrace); IEnumerator enumerator = errorList.GetEnumerator(); bool checkCur = enumerator.MoveNext(); /*if (checkCur && enumerator.Current != null) { * outcome.SetException ((Exception)(enumerator.Current)); * } else { * Console.WriteLine ("Error: Unknown exception thrown"); * }*/ outcome.SetErrorsReported(errorList); //outcome.SetErrorsReported(collector.GetErrorCodes); } // compiler.setErrorListener(collector); } else if (pack != null) { Uri hrefFile = res.ResolveUri(pack.BaseUri, pack.GetAttributeValue(new QName("file"))); Stream stream = new FileStream(hrefFile.AbsolutePath, FileMode.Open, FileAccess.Read); XsltCompiler compiler = env.xsltCompiler; compiler.ErrorList = errorList; compiler.XsltLanguageVersion = (spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0"); //compiler.setErrorListener(collector); try { XsltPackage xpack = compiler.CompilePackage(stream); sheet = xpack.Link(); } catch (Exception err) { Console.WriteLine(err.Message); IEnumerator enumerator = errorList.GetEnumerator(); enumerator.MoveNext(); outcome.SetException((Exception)(enumerator.Current)); outcome.SetErrorsReported(errorList); } } if (sheet != null) { XdmItem contextItem = env.contextItem; XdmNode initialMode = (XdmNode)xpath.EvaluateSingle("initial-mode", testInput); XdmNode initialFunction = (XdmNode)xpath.EvaluateSingle("initial-function", testInput); XdmNode initialTemplate = (XdmNode)xpath.EvaluateSingle("initial-template", testInput); QName initialModeName = GetQNameAttribute(xpath, testInput, "initial-mode/@name"); QName initialTemplateName = GetQNameAttribute(xpath, testInput, "initial-template/@name"); if (useXslt30Transformer) { try { bool assertsSerial = xpath.Evaluate("result//(assert-serialization|assert-serialization-error|serialization-matches)", testCase).Count > 0; bool resultAsTree = env.outputTree; bool serializationDeclared = env.outputSerialize; XdmNode needsTree = (XdmNode)xpath.EvaluateSingle("output/@tree", testInput); if (needsTree != null) { resultAsTree = needsTree.StringValue.Equals("yes"); } XdmNode needsSerialization = (XdmNode)xpath.EvaluateSingle("output/@serialize", testInput); if (needsSerialization != null) { serializationDeclared = needsSerialization.StringValue.Equals("yes"); } bool resultSerialized = serializationDeclared || assertsSerial; if (assertsSerial) { String comment = outcome.GetComment(); comment = (comment == null ? "" : comment) + "*Serialization " + (serializationDeclared ? "declared* " : "required* "); outcome.SetComment(comment); } Xslt30Transformer transformer = sheet.Load30(); transformer.InputXmlResolver = env; if (env.unparsedTextResolver != null) { transformer.GetUnderlyingController.setUnparsedTextURIResolver(env.unparsedTextResolver); } Dictionary <QName, XdmValue> caseGlobalParams = GetNamedParameters(xpath, testInput, false, false); Dictionary <QName, XdmValue> caseStaticParams = GetNamedParameters(xpath, testInput, true, false); Dictionary <QName, XdmValue> globalParams = new Dictionary <QName, XdmValue>(env.params1); foreach (KeyValuePair <QName, XdmValue> entry in caseGlobalParams) { globalParams.Add(entry.Key, entry.Value); } foreach (KeyValuePair <QName, XdmValue> entry in caseStaticParams) { globalParams.Add(entry.Key, entry.Value); } transformer.SetStylesheetParameters(globalParams); if (contextItem != null) { transformer.GlobalContextItem = contextItem; } transformer.MessageListener = collector; transformer.BaseOutputURI = baseOutputURI; transformer.MessageListener = new TestOutcome.MessageListener(outcome); XdmValue result = null; TextWriter sw = new StringWriter(); Serializer serializer = env.processor.NewSerializer(); serializer.SetOutputWriter(sw); //serializer.setOutputProperty(Serializer.Property.OMIT_XML_DECLARATION, "yes"); OutputResolver serializingOutput = new OutputResolver(env.processor, outcome, true); net.sf.saxon.Controller controller = transformer.GetUnderlyingController; controller.setOutputURIResolver(serializingOutput); XmlDestination dest = null; if (resultAsTree) { // If we want non-serialized, we need to accumulate any result documents as trees too controller.setOutputURIResolver( new OutputResolver(env.processor, outcome, false)); dest = new XdmDestination(); } if (resultSerialized) { dest = serializer; } Stream src = null; Uri srcBaseUri = new Uri("http://uri"); XdmNode srcNode = null; DocumentBuilder builder2 = env.processor.NewDocumentBuilder(); if (env.streamedPath != null) { src = new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read); srcBaseUri = new Uri(env.streamedPath); } else if (env.streamedContent != null) { byte[] byteArray = Encoding.UTF8.GetBytes(env.streamedContent); src = new MemoryStream(byteArray); //, "inlineDoc"); builder2.BaseUri = new Uri("http://uri"); } else if (initialTemplate == null && contextItem != null) { srcNode = (XdmNode)(contextItem); } if (initialMode != null) { QName name = GetQNameAttribute(xpath, initialMode, "@name"); try { if (name != null) { transformer.InitialMode = name; } else { controller.getInitialMode(); /// has the side effect of setting to the unnamed } } catch (Exception e) { if (e.InnerException is net.sf.saxon.trans.XPathException) { Console.WriteLine(e.Message); outcome.SetException(e); //throw new SaxonApiException(e.getCause()); } else { throw e; } } } if (initialMode != null || initialTemplate != null) { XdmNode init = (XdmNode)(initialMode == null ? initialTemplate : initialMode); Dictionary <QName, XdmValue> params1 = GetNamedParameters(xpath, init, false, false); Dictionary <QName, XdmValue> tunnelledParams = GetNamedParameters(xpath, init, false, true); if (xsltLanguageVersion.Equals("2.0")) { if (!(params1.Count == 0 && tunnelledParams.Count == 0)) { Console.WriteLine("*** Initial template parameters ignored for XSLT 2.0"); } } else { transformer.SetInitialTemplateParameters(params1, false); transformer.SetInitialTemplateParameters(tunnelledParams, true); } } if (initialTemplate != null) { QName name = GetQNameAttribute(xpath, initialTemplate, "@name"); transformer.GlobalContextItem = contextItem; if (dest == null) { result = transformer.CallTemplate(name); } else { transformer.CallTemplate(name, dest); } } else if (initialFunction != null) { QName name = getQNameAttribute(xpath, initialFunction, "@name"); XdmValue[] params2 = getParameters(xpath, initialFunction); if (dest == null) { result = transformer.CallFunction(name, params2); } else { transformer.CallFunction(name, params2, dest); } } else { if (dest == null) { if (src != null) { result = transformer.ApplyTemplates(src, srcBaseUri); } else { result = transformer.ApplyTemplates(srcNode); } } else { if (src != null) { transformer.ApplyTemplates(src, dest); } else { transformer.ApplyTemplates(srcNode, dest); } } } //outcome.SetWarningsReported(collector.getFoundWarnings()); if (resultAsTree && !resultSerialized) { result = ((XdmDestination)(dest)).XdmNode; } if (resultSerialized) { outcome.SetPrincipalSerializedResult(sw.ToString()); } outcome.SetPrincipalResult(result); if (saveResults) { String s = sw.ToString(); // If a transform result is entirely xsl:result-document, then result will be null if (!resultSerialized && result != null) { StringWriter sw2 = new StringWriter(); Serializer se = env.processor.NewSerializer(sw2); se.SetOutputProperty(Serializer.OMIT_XML_DECLARATION, "yes"); env.processor.WriteXdmValue(result, se); se.Close(); s = sw2.ToString(); } // currently, only save the principal result file in the result directory saveResultsToFile(s, resultsDir + "/results/" + testSetName + "/" + testName + ".out"); Dictionary <Uri, TestOutcome.SingleResultDoc> xslResultDocuments = outcome.GetSecondaryResultDocuments(); foreach (KeyValuePair <Uri, TestOutcome.SingleResultDoc> entry in xslResultDocuments) { Uri key = entry.Key; String path = key.AbsolutePath; String serialization = outcome.Serialize(env.processor, entry.Value); saveResultsToFile(serialization, path); } } } catch (Exception err) { //if (err.getCause() is XPathException && //!((XPathException) err.getCause()).hasBeenReported()) { //System.err.println("Unreported ERROR: " + err.getCause()); //} outcome.SetException(err); if (collector.getErrorCodes().Count > 0) { outcome.SetErrorsReported((IList)collector.getErrorCodes()); } //Console.WriteLine(err.StackTrace); /*if(err.getErrorCode() == null) { * int b = 3 + 4; } * if(err.getErrorCode() != null) * outcome.AddReportedError(err.getErrorCode().getLocalName()); * } else { * outcome.SetErrorsReported(collector.getErrorCodes()); * }*/ } /*catch (Exception err) { * err.printStackTrace(); * failures++; * resultsDoc.writeTestcaseElement(testName, "fail", "*** crashed " + err.getClass() + ": " + err.getMessage()); * return; * }*/ } else { try { XsltTransformer transformer = sheet.Load(); //transformer.SetURIResolver(env); //TODO if (env.unparsedTextResolver != null) { transformer.Implementation.setUnparsedTextURIResolver(env.unparsedTextResolver); } if (initialTemplate != null) { transformer.InitialTemplate = initialTemplateName; } if (initialMode != null) { transformer.InitialMode = initialModeName; } foreach (XdmItem param in xpath.Evaluate("param", testInput)) { string name = ((XdmNode)param).GetAttributeValue(new QName("name")); string select = ((XdmNode)param).GetAttributeValue(new QName("select")); XdmValue value = xpath.Evaluate(select, null); transformer.SetParameter(new QName(name), value); } if (contextItem != null) { transformer.InitialContextNode = (XdmNode)contextItem; } if (env.streamedPath != null) { transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri); } foreach (QName varName in env.params1.Keys) { transformer.SetParameter(varName, env.params1[varName]); } //transformer.setErrorListener(collector); transformer.BaseOutputUri = new Uri(resultsDir + "/results/output.xml"); /*transformer.MessageListener = (new MessageListener() { * public void message(XdmNode content, bool terminate, SourceLocator locator) { * outcome.addXslMessage(content); * } * });*/ // Run the transformation twice, once for serialized results, once for a tree. // TODO: we could be smarter about this and capture both // run with serialization StringWriter sw = new StringWriter(); Serializer serializer = env.processor.NewSerializer(sw); transformer.Implementation.setOutputURIResolver(new OutputResolver(driverProc, outcome, true)); transformer.Run(serializer); outcome.SetPrincipalSerializedResult(sw.ToString()); if (saveResults) { // currently, only save the principal result file saveResultsToFile(sw.ToString(), resultsDir + "/results/" + testSetName + "/" + testName + ".out"); } transformer.MessageListener = new TestOutcome.MessageListener(outcome); // run without serialization if (env.streamedPath != null) { transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri); } XdmDestination destination = new XdmDestination(); transformer.Implementation.setOutputURIResolver( new OutputResolver(env.processor, outcome, false)); transformer.Run(destination); //transformer. .transform(); outcome.SetPrincipalResult(destination.XdmNode); //} } catch (Exception err) { outcome.SetException(err); //outcome.SetErrorsReported(collector.getErrorCodes()); // err.printStackTrace(); // failures++; //resultsDoc.writeTestcaseElement(testName, "fail", "*** crashed " + err.Message); //return; } } XdmNode assertion = (XdmNode)xpath.EvaluateSingle("result/*", testCase); if (assertion == null) { failures++; resultsDoc.writeTestcaseElement(testName, "fail", "No test assertions found"); return; } XPathCompiler assertionXPath = env.processor.NewXPathCompiler(); //assertionXPath.setLanguageVersion("3.0"); bool success = outcome.TestAssertion(assertion, outcome.GetPrincipalResultDoc(), assertionXPath, xpath, debug); if (success) { if (outcome.GetWrongErrorMessage() != null) { outcome.SetComment(outcome.GetWrongErrorMessage()); wrongErrorResults++; } else { successes++; } resultsDoc.writeTestcaseElement(testName, "pass", outcome.GetComment()); } else { failures++; resultsDoc.writeTestcaseElement(testName, "fail", outcome.GetComment()); } } }
private void Transform() { var processor = new Processor(); XsltCompiler compiler = processor.NewXsltCompiler(); XMLForm frmXML = null; XSLForm frmXSL = null; try { Cursor.Current = Cursors.WaitCursor; // Find the XSL form and XML forms foreach (Form frm in this.MdiChildren) { if (frm.Tag == null) { if (frm.Name == "XMLForm") { frmXML = (XMLForm)frm; } else if (frm.Name == "XSLForm") { frmXSL = (XSLForm)frm; } } } if (frmXML == null) { throw new ApplicationException("No XML form found"); } if (frmXSL == null) { throw new ApplicationException("No XSL form found"); } if (frmXSL.TextEditor.Text == "") { throw new ApplicationException("XSL form is empty"); } if (frmXML.TextEditor.Text == "") { throw new ApplicationException("XML form is empty"); } TextReader xslReader = new StringReader(frmXSL.TextEditor.Text); // Compile stylesheet XsltExecutable executable = compiler.Compile(xslReader); // Do transformation to a destination RawDestination destination = new RawDestination(); using (MemoryStream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(frmXML.TextEditor.Text ?? ""))) { Xslt30Transformer transformer = executable.Load30(); transformer.ApplyTemplates(xmlStream, destination); } string result; if (this.indentResultToolStripMenuItem.Checked) { // Indent the XML var stringBuilder = new StringBuilder(); var element = XElement.Parse(destination.XdmValue.ToString()); var settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = false; settings.Indent = true; settings.NewLineOnAttributes = false; using (var xmlWriter = XmlWriter.Create(stringBuilder, settings)) { element.Save(xmlWriter); } result = stringBuilder.ToString(); } else { result = destination.XdmValue.ToString(); } // Get / create the form XMLForm frmResult = null; if (this.overwriteOutputToolStripMenuItem.Checked) { foreach (Form frm in this.MdiChildren) { if (frm.Tag != null) { if (frm.Tag.ToString() == "Output") { frmResult = (XMLForm)frm; break; } } } } // If form has not been got then create it if (frmResult == null) { frmResult = new XMLForm(); frmResult.Owner = this; } else { frmResult.TopMost = true; frmResult.BringToFront(); } frmResult.MdiParent = this; frmResult.TextEditor.Text = result; frmResult.Tag = "Output"; frmResult.Show(); } catch (Exception ex) { string err = ex.Message + "\n"; err += ex.GetType().ToString() + "\n"; foreach (StaticError staticErr in compiler.ErrorList) { err += staticErr.Message + " (line no : " + staticErr.LineNumber + ")\n"; } MessageBox.Show(err); } finally { Cursor.Current = Cursors.Default; } }
internal AbstractDestination(Xslt30Transformer xslt30Transformer, XmlDestination destination) { this.xslt30Transformer = xslt30Transformer; this.destination = destination; }
public string Transform(string message, string version) { // XSLT Transformation can be either performed by the internal XSLT 1.0 processor // or via the SAXON processor, which supports XSLT 3.0 logger.Info("Performing XSLT transform before sending to " + this.queueName); if (version == "1.0") { //Use the in built XSL 1.0 MS Processor logger.Info("Performing XSLT transform using XSL 1.0 Processor"); try { foreach (string sheet in styleSheets) { FileInfo xslt = new FileInfo(sheet); XmlDocument doc = new XmlDocument(); doc.LoadXml(message); XDocument newTree = new XDocument(); using (XmlWriter writer = newTree.CreateWriter()) { // Load the style sheet. XslCompiledTransform xs = new XslCompiledTransform(); xs.Load(sheet); // Execute the transform and output the results to a writer. xs.Transform(doc, writer); } message = newTree.ToString(); } } catch (Exception ex) { logger.Error("XSL 1.0 Transformation Error"); logger.Error(ex.Message); return(null); } logger.Info("XSLT transform using 1.0 Processor Complete"); return(message); } else { //Use the SAXON 2.0/3.0 Processor (not as fast) logger.Info("Performing XSLT transform using Saxon XSL 3.0 Processor"); try { foreach (string sheet in styleSheets) { FileStream stream = File.Open(new FileInfo(sheet).ToString(), FileMode.Open); XmlDocument doc = new XmlDocument(); doc.LoadXml(message); Processor processor = new Processor(); XdmNode input = processor.NewDocumentBuilder().Build(doc); Xslt30Transformer transformer = processor.NewXsltCompiler().Compile(stream).Load30(); Serializer serializer = processor.NewSerializer(); StringWriter strWriter = new StringWriter(); serializer.SetOutputWriter(strWriter); // Transform the source XML and serialize the result document transformer.ApplyTemplates(input, serializer); message = strWriter.ToString(); } logger.Info("XSLT transform using 3.0 Processor Complete"); return(message); } catch (Exception ex) { logger.Error("XSL 3.0 Transformation Error"); logger.Error(ex.Message); return(null); } } }