public EXAttr(EXElement el, string name) { if (el != EXDocument._emptyElement) { this._exElement = el; this.Name = name; } else { this._exElement = EXDocument._emptyElement; this.Name = ""; this.Value = ""; } }
/// <summary> /// 文字列からドキュメントを作成する /// </summary> /// <param name="xml"></param> public void LoadXML(string xml) { using (XmlReader reader = XmlReader.Create(new StringReader(xml))) { // ルート要素までジャンプ while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { EXElement root = new EXElement(this); this.DocumentElement = root; root.Name = reader.Name; root.Value = ""; root.Parent = EXDocument._emptyElement; LoadXML(reader, root); } } } }
/// <summary> /// 補助関数 /// </summary> /// <param name="reader"></param> /// <param name="pa"></param> protected void LoadXML(XmlReader reader, EXElement pa) { EXElement el = null; while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: el = new EXElement(pa.Document); el.Name = reader.Name; pa.ChildNodes.Add(el); el.Parent = pa; if (reader.HasAttributes) { if (reader.HasAttributes) { for (int i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); EXAttr attr = new EXAttr(el, reader.Name); attr.Value = reader.Value; el.Attributes.Add(attr.Name, attr); } } reader.MoveToElement(); } LoadXML(reader, el); break; case XmlNodeType.EndElement: return; case XmlNodeType.Text: pa.Value = reader.Value; break; } } }
/// <summary> /// コンストラクタ /// </summary> public EXDocument() { _emptyElement = new EXElement(this); _emptyAttr = new EXAttr(_emptyElement, ""); _emptyAttr.Value = ""; }
/// <summary> /// 要素を作成する /// </summary> /// <returns></returns> public EXElement CreateElement() { EXElement el = new EXElement(this); return(el); }