示例#1
0
        public void ReadXml(XmlReader reader)
        {
            if (Value != null)
            {
                try
                {
                    Value.ReadXml(reader);
                }
                catch (Exception e)
                {
                    var msg = string.Format("Failed to parse Node: {0}", FullName);
                    //m_tree.OnError(msg);
                    LogUtil.ErrorException(e, msg);
                }
            }

            if (Children.Count > 0)
            {
                var used = new List <StringNode <V> >();
                for (var i = 0; i < Children.Count;)
                {
                    reader.Read();
                    if (reader.ReadState == ReadState.EndOfFile)
                    {
                        throw new Exception("Unexpected EOF in Config.");
                    }
                    reader.SkipEmptyNodes();

                    if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        break;
                    }
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        var child = GetChild(reader.Name);
                        if (child == null)
                        {
                            OnInvalidNode(reader);
                        }
                        else
                        {
                            i++;
                            used.Add(child);
                            if (!reader.IsEmptyElement)
                            {
                                child.ReadXml(reader);
                            }
                            else
                            {
                                reader.SkipEmptyNodes();
                            }
                        }
                    }
                }

                var unused = Children.Values.Except(used);
                if (unused.Count() > 0)
                {
                    m_tree.OnError("Found {0} missing Node(s): {1}",
                                   unused.Count(),
                                   unused.ToString(", ", node => node.FullName));
                }
            }
            reader.SkipEmptyNodes();

            if (reader.IsEmptyElement)
            {
                reader.Read();
            }

            reader.SkipEmptyNodes();
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                OnInvalidNode(reader);
                reader.SkipEmptyNodes();
            }

            reader.ReadEndElement();
        }
示例#2
0
        public void ReadXml(XmlReader reader)
        {
            if (Value != null)
            {
                try
                {
                    Value.ReadXml(reader);
                }
                catch (Exception ex)
                {
                    LogUtil.ErrorException(ex, string.Format("Failed to parse Node: {0}", FullName));
                }
            }

            if (Children.Count > 0)
            {
                List <StringNode <V> > stringNodeList = new List <StringNode <V> >();
                int num = 0;
                while (num < Children.Count)
                {
                    reader.Read();
                    if (reader.ReadState == ReadState.EndOfFile)
                    {
                        throw new Exception("Unexpected EOF in Config.");
                    }
                    reader.SkipEmptyNodes();
                    if (reader.NodeType != XmlNodeType.EndElement)
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            StringNode <V> child = GetChild(reader.Name);
                            if (child == null)
                            {
                                OnInvalidNode(reader);
                            }
                            else
                            {
                                ++num;
                                stringNodeList.Add(child);
                                if (!reader.IsEmptyElement)
                                {
                                    child.ReadXml(reader);
                                }
                                else
                                {
                                    reader.SkipEmptyNodes();
                                }
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                IEnumerable <StringNode <V> > stringNodes =
                    Children.Values.Except(stringNodeList);
                if (stringNodes.Count() > 0)
                {
                    m_tree.OnError("Found {0} missing Node(s): {1}", (object)stringNodes.Count(),
                                   (object)stringNodes.ToString(", ",
                                                                node => (object)node.FullName));
                }
            }

            reader.SkipEmptyNodes();
            if (reader.IsEmptyElement)
            {
                reader.Read();
            }
            reader.SkipEmptyNodes();
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                OnInvalidNode(reader);
                reader.SkipEmptyNodes();
            }

            reader.ReadEndElement();
        }