public string Provide(XmlConfigRuleContext ruleContext) { XslTransformRule.Context context = new XslTransformRule.Context(); context.FileManager = ruleContext.FileManager; context.ReadFromXmlNode(ruleContext.RuleConfig); string result = Rule.Provide(context); // test for result XPathNavigator nav = ruleContext.RuleConfig.CreateNavigator(); XPathNavigator resultNav = nav.SelectSingleNode("result"); if (resultNav != null) { // store result in file string resultFileName = resultNav.GetAttribute("file", String.Empty); if (!String.IsNullOrEmpty(resultFileName)) { if (log.IsEnabledFor(LogEvent.Debug)) { log.Write(LogEvent.Debug, new{ Action = "writing transform result to file", Filename = resultFileName }); } ruleContext.FileManager.Write(resultFileName, result); result = null; } } return(result); }
public void Execute(FileRuleContext ruleContext) { XslTransformRule.Context xsltContext = new XslTransformRule.Context(); xsltContext.FileManager = ruleContext.FileManager; xsltContext.ReadFromXmlNode(ruleContext.XmlSettings); string resContent = TransformRule.Provide(xsltContext); XPathNavigator resultFileNameNav = ruleContext.XmlSettings.SelectSingleNode("result/@file"); if (resultFileNameNav != null) { if (!String.IsNullOrEmpty(resultFileNameNav.Value)) { if (log.IsEnabledFor(LogEvent.Debug)) { log.Write(LogEvent.Debug, new { Msg = "Writing XSL transformation result to file", File = resultFileNameNav.Value }); } ruleContext.FileManager.Write(resultFileNameNav.Value, PrepareTransformedContent(resContent)); } else { log.Write(LogEvent.Warn, "Nothing to do with XSLT result: output file name is not specified."); } } else { // may be result-dependent files are configured? XPathNavigator resultFileNav = ruleContext.XmlSettings.SelectSingleNode("result/file"); if (resultFileNav != null) { // read result var resultXPathDoc = new XPathDocument(new StringReader(resContent)); // check @xpath attr var xPathNav = resultFileNav.SelectSingleNode("@xpath"); if (xPathNav == null) { log.Write(LogEvent.Warn, "Nothing to do with XSLT result: XPath for output file is not specified."); return; } string xPath = xPathNav.Value; // determine file name xpath string fileNameXPath = null; var fileNameXPathNav = resultFileNav.SelectSingleNode("name/@xpath"); if (fileNameXPathNav != null) { fileNameXPath = fileNameXPathNav.Value; } // determine file content xpath string fileContentXPath = null; var fileContentXPathNav = resultFileNav.SelectSingleNode("content/@xpath"); if (fileContentXPathNav != null) { fileContentXPath = fileContentXPathNav.Value; } // iterate var results = resultXPathDoc.CreateNavigator().Select(xPath); if (log.IsEnabledFor(LogEvent.Info)) { log.Write(LogEvent.Info, "Matched {0} file generation results.", results.Count); } foreach (XPathNavigator nav in results) { // determine file name var currentFileNameNav = nav.SelectSingleNode(fileNameXPath); if (currentFileNameNav == null) { log.Write(LogEvent.Warn, new { Msg = "Result is matched but output file name is not matched." }); continue; } // determine file contents var resultFileContentNav = nav.SelectSingleNode(fileContentXPath); if (resultFileContentNav == null) { log.Write(LogEvent.Warn, new { Msg = "Result is matched but output file content is not matched." }); continue; } string fileContent = PrepareTransformedContent(resultFileContentNav.InnerXml); ruleContext.FileManager.Write(currentFileNameNav.Value, fileContent); } } } }