Beispiel #1
0
 /// <summary>
 /// 读取xml文件Element节点,返回值恒为false
 /// </summary>
 /// <param name="reader">代表节点读取是否完成</param>
 /// <param name="readArgs">代表读取到的一些参数</param>
 /// <param name="context">代表读取过程中的上下文环境,例如包括父节点</param>
 /// <returns></returns>
 protected bool ReadElement(System.Xml.XmlTextReader reader, ReadArgs readArgs, ReadContext context)
 {
     readArgs.Name       = reader.Name;
     readArgs.Attributes = new XmlAttributeCollection();
     for (int i = 0; i < reader.AttributeCount; ++i)
     {
         reader.MoveToNextAttribute();
         readArgs.Attributes.Add(new DefaultXmlAttribute()
         {
             Key   = reader.Name,
             Value = reader.Value,
         });
     }
     readArgs.ParentNode = context.PeekParentNode();
     context.PushParentNode(readArgs);
     return(false);
 }
Beispiel #2
0
        protected ReadContext ReadNodeProcess(string filePath, string nodeName)
        {
            FileStream stream = new FileStream(filePath, FileMode.Open);

            System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(stream);
            ReadArgs    readArgs            = null;
            ReadContext context             = new ReadContext();
            bool        readIsFinish        = false;

            if (nodeName == null)
            {
                reader.Read();
            }
            else
            {
                reader.ReadToFollowing(nodeName);
            }
            do
            {
                int nowDepth = reader.Depth;
                switch (reader.NodeType)
                {
                case System.Xml.XmlNodeType.Element:
                    ConsoleLog.WriteLine(System.Xml.XmlNodeType.Element + "-" + reader.Name);
                    //该条件成立时,判定读取节点为GroupNode
                    if (context.PreviousNodeType == System.Xml.XmlNodeType.Element)
                    {
                        readArgs.Type = XmlNodeType.Group;
                        ReadSingleNodeStart?.Invoke(context, readArgs);
                        if (reader.Depth == context.PreviousDepth && readArgs.Name == nodeName)
                        {
                            readIsFinish = true;
                            context.PopParentNode();
                            break;
                        }
                    }

                    readArgs                 = new ReadArgs();
                    context.NodeIsEnd        = ReadElement(reader, readArgs, context);
                    context.PreviousNodeType = System.Xml.XmlNodeType.Element;
                    context.PreviousDepth    = nowDepth;
                    break;

                case System.Xml.XmlNodeType.Text:
                    ConsoleLog.WriteLine(System.Xml.XmlNodeType.Text + "-" + reader.Name);
                    //判定当前节点为ContentNode
                    readArgs.Type = XmlNodeType.Content;
                    ReadSingleNodeStart?.Invoke(context, readArgs);
                    context.NodeIsEnd        = ReadText(reader, readArgs, context);
                    context.PreviousNodeType = System.Xml.XmlNodeType.Text;
                    context.PreviousDepth    = nowDepth;
                    break;

                case System.Xml.XmlNodeType.EndElement:
                    ConsoleLog.WriteLine(System.Xml.XmlNodeType.EndElement + "-" + reader.Name);
                    //当条件成立时,判定节点为GroupNode
                    if (context.PreviousNodeType == System.Xml.XmlNodeType.Element)
                    {
                        readArgs.Type = XmlNodeType.Group;
                        ReadSingleNodeStart?.Invoke(context, readArgs);
                    }

                    context.NodeIsEnd = ReadEndElement(reader, readArgs, context);
                    ReadSingleNodeEnd?.Invoke(context, readArgs);
                    if (reader.Name == nodeName)
                    {
                        readIsFinish = true;
                    }
                    readArgs = new ReadArgs();
                    context.PreviousNodeType = System.Xml.XmlNodeType.EndElement;
                    context.PreviousDepth    = nowDepth;
                    break;
                }
                if (readIsFinish)
                {
                    break;
                }
            }while (reader.Read());
            reader.Close();
            return(context);
        }
Beispiel #3
0
 /// <summary>
 /// 读取节点结束标记,返回值恒为false
 /// </summary>
 /// <param name="reader">代表节点读取是否完成</param>
 /// <param name="readArgs">代表读取到的一些参数</param>
 /// <param name="context">代表读取过程中的上下文环境,例如包括父节点</param>
 /// <returns></returns>
 protected bool ReadEndElement(System.Xml.XmlTextReader reader, ReadArgs readArgs, ReadContext context)
 {
     context.PopParentNode();
     return(true);
 }
Beispiel #4
0
 /// <summary>
 /// 读取xml文件text节点,返回值恒为false
 /// </summary>
 /// <param name="reader">代表节点读取是否完成</param>
 /// <param name="readArgs">代表读取到的一些参数</param>
 /// <param name="context">代表读取过程中的上下文环境,例如包括父节点</param>
 /// <returns></returns>
 protected bool ReadText(System.Xml.XmlTextReader reader, ReadArgs readArgs, ReadContext context)
 {
     readArgs.Value = reader.Value;
     readArgs.Type  = XmlNodeType.Content;
     return(false);
 }