public Cat fromNode(XmlNode node) { Cat obj = null; if (node.Name == "bobcat") { obj = new Bobcat(); ((Bobcat)obj).hear_count = Convert.ToInt64(node.Attributes[0].Value); ((Bobcat)obj).cat_type = node.Attributes[1].Value; obj.age = Convert.ToInt32(node.Attributes[3].Value); obj.name = node.Attributes[2].Value; obj.weight = Convert.ToSingle(node.Attributes[4].Value); } if (node.Name == "tiger") { obj = new Tiger(); ((Tiger)obj).location = node.Attributes[0].Value; ((Tiger)obj).color = node.Attributes[1].Value; ((Tiger)obj).height = Convert.ToSingle(node.Attributes[2].Value); ((Tiger)obj).is_hungry = Convert.ToBoolean(node.Attributes[3].Value); obj.age = Convert.ToInt32(node.Attributes[5].Value); obj.name = node.Attributes[4].Value; obj.weight = Convert.ToSingle(node.Attributes[6].Value); } return obj; }
public List<Cat> Load() { List<Cat> lst = new List<Cat>(); FileStream fs = new FileStream(path_to_file, FileMode.OpenOrCreate); StreamReader sr = new StreamReader(fs, Encoding.UTF8); SAX_parser parser = new SAX_parser(sr); Cat obj = null; parser.StartTag += (tag_name) => { if (tag_name == "bobcat") { obj = new Bobcat(); } if (tag_name == "tiger") { obj = new Tiger(); } }; parser.Characters += (name,value) => { switch (name) { case "name": { obj.name = value; break; } case "age": { obj.age = Convert.ToInt32(value); break; } case "weight": { obj.weight = Convert.ToSingle(value); break; } case "hear_count": { ((Bobcat)(obj)).hear_count = Convert.ToInt64(value); break; } case "cat_type": { ((Bobcat)(obj)).cat_type = value; break; } case "location": { ((Tiger)(obj)).location = value; break; } case "color": { ((Tiger)(obj)).color = value; break; } case "height": { ((Tiger)(obj)).height = Convert.ToSingle(value); break; } case "is_hungry": { ((Tiger)(obj)).is_hungry = Convert.ToBoolean(value); break; } } }; parser.EndTag += (tag_name) => { if (tag_name == "bobcat" || tag_name == "tiger") { lst.Add(obj); } }; parser.start(); sr.Close(); fs.Close(); return lst; }