public override IPackageInstallResult Do(IPackage package, IFilePathResolver target){ var wasError = false; var result = new DefaultPackageInstallResult{Message = "applying auto xslt"}; var allfiles = package.PathResolver.ResolveAll("", "*.*"); var xsltTaskFiles = allfiles.Where(s => s.EndsWith(".taskinfo.xslt")); xsltTaskFiles.Select( s =>{ if (wasError){ return s; } var targetFileName = s.Substring(0, s.Length - ".taskinfo.xslt".Length); if (GetProceed(target, targetFileName, result)){ var xsltSource = package.PathResolver.ReadBinary(s); var targetSource = target.Read(targetFileName); var sw = new StringWriter(); var xws = new XmlWriterSettings(); xws.Indent = true; xws.NewLineHandling = NewLineHandling.Entitize; xws.OmitXmlDeclaration = true; xws.Encoding = Encoding.UTF8; var xw = XmlWriter.Create(sw, xws); var xsltTransform = new XslCompiledTransform(); var sets = new XsltSettings(true, true); var doc = XmlReader.Create(new StringReader(targetSource)); var xslt = XmlReader.Create(new MemoryStream(xsltSource)); var xmlResolver = new FilePathXmlResolver(package.PathResolver); xsltTransform.Load(xslt, sets, xmlResolver); var args = new XsltArgumentList(); if (ArgPreparator != null){ ArgPreparator(args); } xsltTransform.Transform(doc, args, xw, xmlResolver); target.Write(targetFileName, sw.ToString()); } result.SubMessages.Add("PROCESSED: " + targetFileName); Console.WriteLine("PROCESSED: " + targetFileName); return s; } ).ToList(); return result; }
/// <summary> /// Performs xslt transformation. /// </summary> /// <param name="system">The system.</param> /// <param name="transformation">The transformation.</param> /// <param name="result">The result.</param> /// <param name="args">The args.</param> /// <returns></returns> public static string XsltTransform(this IFilePathResolver system, string transformation, string result, XsltArgumentList args){ var xslt = system.Read(transformation); var resultWriter = new StringWriter(); XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = true; var xwriter = XmlWriter.Create(resultWriter,settings); system.DefinePseudoFile(".this",result); var resolver = new FilePathXmlResolver(system); system.DefinePseudoFile(".my", xslt); var tr = new XslCompiledTransform(); tr.Load(new XPathDocument(new StringReader(xslt)), XsltSettings.TrustedXslt, resolver); var reader = XmlReader.Create(new StringReader(result)); tr.Transform(reader, args, xwriter, resolver); xwriter.Flush(); result = resultWriter.ToString(); return result; }