/// <summary> /// Gets a collection of elements in the document which are defined as METAL macros. /// </summary> /// <returns>Elements representing the METAL macros.</returns> public override ITalesPathHandler GetMacros() { var output = this.Document .DocumentNode .DescendantsAndSelf() .Where(ele => ele.Attributes.Any(attr => attr.Name == String.Format("{0}:{1}", ZptConstants.Metal.Namespace.Prefix, ZptConstants.Metal.DefineMacroAttribute))) .Select(x => { var element = new ZptHtmlElement(x, this.SourceFile, this, isImported: true); var context = new RenderingContext(Model.Empty, Model.Empty, element, GetDefaultOptions()); return new Metal.MetalMacro(context.GetMetalAttribute(ZptConstants.Metal.DefineMacroAttribute).Value, element); }) .ToArray(); return new CSF.Zpt.Metal.MetalMacroCollection(output); }
/// <summary> /// Gets a collection of elements in the document which are defined as METAL macros. /// </summary> /// <returns>Elements representing the METAL macros.</returns> public override ITalesPathHandler GetMacros() { var xpath = String.Format("//*[@{0}:{1}]", ZptConstants.Metal.Namespace.Prefix, ZptConstants.Metal.DefineMacroAttribute); var reader = this.Document.CreateReader(); var root = this.Document.Root; var nsManager = new XmlNamespaceManager(reader.NameTable); nsManager.AddNamespace(ZptConstants.Metal.Namespace.Prefix, ZptConstants.Metal.Namespace.Uri); var output = root .XPathSelectElements(xpath, nsManager) .Cast<XNode>() .Select(x => { var element = new ZptXmlLinqElement(x, this.SourceFile, this, isImported: true); var context = new RenderingContext(Model.Empty, Model.Empty, element, GetDefaultOptions()); return new Metal.MetalMacro(context.GetMetalAttribute(ZptConstants.Metal.DefineMacroAttribute).Value, element); }) .ToArray(); return new CSF.Zpt.Metal.MetalMacroCollection(output); }