示例#1
0
        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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        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();
 }
示例#8
0
        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)));
        }
		/// <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();
		}
		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);
		}
		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);
		}
示例#12
0
 public TNode Convert <TNode>(XPathNavigator navigator, IXmlNodeProcessor <TNode> processor)
 {
     return(XPathValue(processor, navigator, default, null, default));
示例#13
0
 public TNode Convert <TNode>(IXPathNavigable navigable, IXmlNodeProcessor <TNode> processor)
 {
     return(Convert(navigable.CreateNavigator(), processor));
 }