AddDependencies() public method

Adds the specified dependencies.
public AddDependencies ( ) : void
return void
Ejemplo n.º 1
0
        private static void CopyXslElements(SageContext context, string stylesheetPath, CacheableXmlDocument targetDocument)
        {
            CacheableXmlDocument fromDocument = context.Resources.LoadXml(stylesheetPath);
            targetDocument.AddDependencies(fromDocument.Dependencies);

            string xpathOthers = string.Join(" | ",
                new[] { "/*/xsl:preserve-space", "/*/xsl:strip-space", "/*/xsl:namespace-alias", "/*/xsl:attribute-set" });

            XmlNodeList paramNodes = fromDocument.SelectNodes("/*/xsl:param", XmlNamespaces.Manager);
            XmlNodeList variableNodes = fromDocument.SelectNodes("/*/xsl:variable", XmlNamespaces.Manager);
            XmlNodeList templateNodes = fromDocument.SelectNodes("/*/xsl:template", XmlNamespaces.Manager);
            XmlNodeList includeNodes = fromDocument.SelectNodes("/*/xsl:include", XmlNamespaces.Manager);
            XmlNodeList scriptNodes = fromDocument.SelectNodes("/*/msxsl:script", XmlNamespaces.Manager);
            XmlNodeList otherNodes = fromDocument.SelectNodes(xpathOthers, XmlNamespaces.Manager);

            string stylesheetDirectory = Path.GetDirectoryName(stylesheetPath);

            // recursively add any includes
            foreach (XmlElement includeElem in includeNodes)
            {
                string includeHref = includeElem.GetAttribute("href");
                Uri includeHrefUri = new Uri(includeHref, UriKind.RelativeOrAbsolute);
                string includePath = includeHrefUri.IsAbsoluteUri ? includeHref : string.Join("/", stylesheetDirectory, includeHref);

                ModuleConfiguration.CopyXslElements(context, includePath, targetDocument);
                targetDocument.AddDependencies(includePath);
            }

            // templates
            foreach (XmlNode xslNode in templateNodes)
                targetDocument.DocumentElement.AppendChild(targetDocument.ImportNode(xslNode, true));

            foreach (XmlNode xslNode in scriptNodes)
                targetDocument.DocumentElement.AppendChild(targetDocument.ImportNode(xslNode, true));

            XmlNode firstNode = targetDocument.SelectSingleNode("/*/xsl:template[1]", XmlNamespaces.Manager);
            foreach (XmlNode xslNode in variableNodes)
                firstNode = targetDocument.DocumentElement.InsertBefore(targetDocument.ImportNode(xslNode, true), firstNode);

            // other nodes before variables or templates, params before other nodes
            foreach (XmlNode xslNode in otherNodes)
                firstNode = targetDocument.DocumentElement.InsertBefore(targetDocument.ImportNode(xslNode, true), firstNode);

            foreach (XmlNode xslNode in paramNodes)
                targetDocument.DocumentElement.InsertBefore(targetDocument.ImportNode(xslNode, true), targetDocument.DocumentElement.SelectSingleNode("*"));

            foreach (XmlAttribute attrNode in fromDocument.DocumentElement.Attributes)
                targetDocument.DocumentElement.SetAttribute(attrNode.Name, attrNode.InnerText);
        }
Ejemplo n.º 2
0
        private static CacheableXmlDocument LoadSourceDocument(string path, SageContext context)
        {
            UrlResolver resolver = new UrlResolver(context);
            CacheableXmlDocument result = new CacheableXmlDocument();
            result.Load(path, context);
            result.AddDependencies(path);
            result.AddDependencies(resolver.Dependencies.ToArray());

            return result;
        }