private IEnumerator <TNode> ReaderContainer <TNode>(IXmlNodeProcessor <TNode> processor, XmlReader reader, TNode baseNode, TNode defaultNamespace) { var wrapper = new XmlReaderWrapper(reader, UseReflection); var originalBaseUri = wrapper.BaseUri; while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.DocumentType: processor.ProcessDocumentType(reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), reader.CanResolveEntity ? null : reader.Value, String.IsNullOrWhiteSpace(reader.Value), baseNode, ref defaultNamespace); continue; case XmlNodeType.Whitespace: yield return(processor.ProcessWhitespace(wrapper, false)); continue; case XmlNodeType.SignificantWhitespace: yield return(processor.ProcessWhitespace(wrapper, true)); continue; case XmlNodeType.Text: yield return(processor.ProcessText(wrapper, false)); continue; case XmlNodeType.CDATA: yield return(processor.ProcessText(wrapper, true)); continue; case XmlNodeType.Comment: yield return(processor.ProcessComment(wrapper)); continue; case XmlNodeType.ProcessingInstruction: yield return(processor.ProcessProcessingInstruction(wrapper, defaultNamespace)); continue; case XmlNodeType.EntityReference: yield return(processor.ProcessEntityReference(wrapper)); continue; case XmlNodeType.Element: yield return(processor.ProcessElement(wrapper, baseNode, originalBaseUri, defaultNamespace, innerBaseNode => ReaderContainer(processor, reader, innerBaseNode, defaultNamespace))); continue; } if (reader.NodeType == XmlNodeType.EndElement) { break; } } }
/// <summary> /// Processes the element. /// </summary> /// <param name="nodeList">The element.</param> /// <returns></returns> public void DispatchProcessCurrent(IXmlProcessorNodeList nodeList) { IXmlNodeProcessor processor = GetProcessor(nodeList.Current); if (processor != null) { processor.Process(nodeList, this); } }
private void RegisterProcessor(XmlNodeType type, IXmlNodeProcessor processor) { if (!nodeProcessors.Contains(type)) { nodeProcessors[type] = new Hashtable(); } IDictionary typeProcessors = (IDictionary)nodeProcessors[type]; if (typeProcessors.Contains(processor.Name)) { throw new XmlProcessorException("There is already a processor register for {0} with name {1} ", type, processor.Name); } typeProcessors.Add(processor.Name, processor); }
public void AddNodeProcessor(Type type) { if (typeof(IXmlNodeProcessor).IsAssignableFrom(type)) { IXmlNodeProcessor processor = Activator.CreateInstance(type) as IXmlNodeProcessor; foreach (XmlNodeType nodeType in processor.AcceptNodeTypes) { RegisterProcessor(nodeType, processor); } } else { throw new XmlProcessorException("{0} does not implement IElementProcessor interface", type.FullName); } }
private void RegisterProcessor(XmlNodeType type, IXmlNodeProcessor processor) { IDictionary <string, IXmlNodeProcessor> typeProcessors; if (!nodeProcessors.TryGetValue(type, out typeProcessors)) { typeProcessors = new Dictionary <string, IXmlNodeProcessor>(); nodeProcessors[type] = typeProcessors; } if (typeProcessors.ContainsKey(processor.Name)) { throw new XmlProcessorException("There is already a processor register for {0} with name {1} ", type, processor.Name); } typeProcessors.Add(processor.Name, processor); }
private IXmlNodeProcessor GetProcessor(XmlNode node) { IXmlNodeProcessor processor = null; IDictionary processors = nodeProcessors[node.NodeType] as IDictionary; if (processors != null) { processor = processors[node.Name] as IXmlNodeProcessor; // sometimes nodes with the same name will not accept a processor if (processor == null || !processor.Accept(node)) { if (node.NodeType == XmlNodeType.Element) { processor = defaultElementProcessor; } } } return(processor); }
/// <summary> /// Initializes a new instance of the <see cref="DefaultXmlProcessorEngine"/> class. /// </summary> /// <param name="environmentName">Name of the environment.</param> /// <param name="resourceSubSystem">The resource sub system.</param> public DefaultXmlProcessorEngine(string environmentName, IResourceSubSystem resourceSubSystem) { AddEnvNameAsFlag(environmentName); this.resourceSubSystem = resourceSubSystem; defaultElementProcessor = new DefaultElementProcessor(); }
public TNode Convert <TNode>(XmlReader reader, IXmlNodeProcessor <TNode> processor) { var wrapper = new XmlReaderWrapper(reader, UseReflection); return(processor.ProcessDocument(wrapper, documentNode => ReaderContainer(processor, reader, documentNode, default))); }
private void RegisterProcessor(XmlNodeType type, IXmlNodeProcessor processor) { IDictionary<string, IXmlNodeProcessor> typeProcessors; if (!nodeProcessors.TryGetValue(type,out typeProcessors)) { typeProcessors = new Dictionary<string, IXmlNodeProcessor>(); nodeProcessors[type] = typeProcessors; } if (typeProcessors.ContainsKey(processor.Name)) { throw new XmlProcessorException("There is already a processor register for {0} with name {1} ", type, processor.Name); } typeProcessors.Add(processor.Name, processor); }
public TNode Convert <TNode>(XPathNavigator navigator, IXmlNodeProcessor <TNode> processor) { return(XPathValue(processor, navigator, default, null, default));
public TNode Convert <TNode>(IXPathNavigable navigable, IXmlNodeProcessor <TNode> processor) { return(Convert(navigable.CreateNavigator(), processor)); }