예제 #1
0
 private static void WriteElement(Bamboo.Xml.XmlElement element, Bamboo.Xml.IndentedTextWriter writer)
 {
     writer.Write("<" + element.Name);
     foreach (Bamboo.Xml.XmlAttribute attribute in element.Attributes)
     {
         writer.Write(" " + attribute.Name + "=\"" + attribute.Value + "\"");
     }
     writer.Write(">");
     writer.Write(System.Web.HttpUtility.HtmlEncode(element.Value));
     if (element.Elements.Count > 0)
     {
         writer.WriteLineNoTabs();
         writer.Indent();
         foreach (Bamboo.Xml.XmlElement element2 in element.Elements)
         {
             writer.WriteIndentations();
             WriteElement(element2, writer);
             writer.WriteLineNoTabs();
         }
         writer.Unindent();
     }
     writer.Write("</" + element.Name + ">");
 }
예제 #2
0
        private static Bamboo.Xml.XmlElement Read(System.Xml.XmlTextReader xmlTextReader)
        {
            System.Collections.Stack elementsStack = new System.Collections.Stack();

            while (xmlTextReader.Read())
            {
                switch (xmlTextReader.NodeType)
                {
                case System.Xml.XmlNodeType.Element:
                {
                    Bamboo.Xml.XmlElement element = new Bamboo.Xml.XmlElement();
                    element.Name = xmlTextReader.LocalName;

                    if (xmlTextReader.IsEmptyElement)
                    {
                        if (elementsStack.Count == 0)
                        {
                            elementsStack.Push(element);
                        }
                        else
                        {
                            Bamboo.Xml.XmlElement parent = (XmlElement)elementsStack.Peek();
                            parent.Elements.Add(element);
                        }
                    }
                    else
                    {
                        if (elementsStack.Count > 0)
                        {
                            Bamboo.Xml.XmlElement parent = (XmlElement)elementsStack.Peek();
                            parent.Elements.Add(element);
                        }
                        elementsStack.Push(element);
                    }

                    for (int i = 0; i < xmlTextReader.AttributeCount; i++)
                    {
                        xmlTextReader.MoveToAttribute(i);

                        Bamboo.Xml.XmlAttribute xmlAttribute = new Bamboo.Xml.XmlAttribute();
                        xmlAttribute.Name  = xmlTextReader.LocalName;
                        xmlAttribute.Value = xmlTextReader.Value;

                        element.Attributes.Add(xmlAttribute);
                    }

                    break;
                }

                case System.Xml.XmlNodeType.EndElement:
                {
                    if (elementsStack.Count > 1)
                    {
                        elementsStack.Pop();
                    }
                    break;
                }

                case System.Xml.XmlNodeType.CDATA:
                case System.Xml.XmlNodeType.Text:
                {
                    ((XmlElement)elementsStack.Peek()).Value = xmlTextReader.Value;
                    break;
                }
                }
            }

            if (elementsStack.Count == 0)
            {
                throw new System.Exception("Document does not contain any elements.");
            }
            else if (elementsStack.Count > 1)
            {
                throw new System.Exception("Document contains more than one root element.");
            }

            return((XmlElement)elementsStack.Pop());
        }
예제 #3
0
 public static void Write(Bamboo.Xml.XmlElement element, System.IO.TextWriter writer)
 {
     WriteElement(element, new Bamboo.Xml.IndentedTextWriter(writer));
     writer.Flush();
 }
예제 #4
0
 public static void Write(Bamboo.Xml.XmlElement element, System.IO.Stream stream)
 {
     Write(element, new System.IO.StreamWriter(stream));
 }