コード例 #1
0
        public SmolRootElement Parse(string input)
        {
            for (int i = 0; i < input.Length; i++)
            {
                if (input[i] == '"')
                {
                    if (quoteLevel == 1)
                    {
                        quoteLevel = 0;
                    }
                    else
                    {
                        quoteLevel = 1;
                    }
                }

                if (input[i] == '<')
                {
                    state = ParsingState.InsideTag;

                    if (buffer.Length != 0)
                    {
                        elem.AddChild(new SmolTextElement(elem)
                        {
                            text = buffer.ToString()
                        });
                        buffer.Clear();
                    }

                    if (input[i + 1] == '/')
                    {
                        xmlLevel--;
                    }
                    else
                    {
                        var e = new SmolElement(elem);
                        elem.AddChild(e);

                        elem = e;

                        xmlLevel++;
                    }
                }
                else if (input[i] == '>')
                {
                    if (xmlLevel == 0)
                    {
                        state = ParsingState.NonXML;
                    }
                    else
                    {
                        state = ParsingState.InsideValue;
                    }

                    if (buffer[0] == '/')
                    {
                        elem = elem.parent;
                    }
                    else
                    {
                        elem.tagName = buffer.ToString();
                    }
                    buffer.Clear();
                }
                else
                {
                    buffer.Append(input[i]);
                }
            }

            return(elem as SmolRootElement);
        }
コード例 #2
0
 public SmolElement(SmolElement parent)
 {
     this.parent = parent;
 }
コード例 #3
0
 public void AddChild(SmolElement elem)
 {
     _children.Add(elem);
 }
コード例 #4
0
 public SmolTextElement(SmolElement parent) :
     base(parent)
 {
 }