Example #1
0
        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;
        }