protected void AddChild(XNode parent, TestItem node) { //<TestModule/TestCase/Variation> string name = node.Type.ToString(); //Create the Element CXmlElement element = (CXmlElement) new XElement(name); if (parent is XDocument) { ((XDocument)parent).Add(element); } else if (parent is XElement) { ((XElement)parent).Add(element); } else { throw new Exception("Error in Add Child"); } //Add typed properties AddProperty(element, "Name", node.Name, 0); AddProperty(element, "Desc", node.Desc, 0); AddProperty(element, "Id", node.Order, 0); AddProperty(element, "Priority", node.Priority, 0); AddProperty(element, "Owner", node.Owner, 0); AddProperty(element, "Owners", node.Owners, TestPropertyFlags.MultipleValues); AddProperty(element, "Version", node.Version, 0); //Add extended properties AddProperties(element, node); //Add our own uniqueid (for fast assoication later) //Note: We place this 'userdata' into our own version of the XmlElement, (derived class) element.UserData = ++pnextuniqueid; puniqueids.Add(pnextuniqueid, node); //Recursure through the children foreach (TestItem childnode in node.Children) { this.AddChild(element, childnode); } }
protected TestItem FindMatchingNode(XElement xmlnode) { TestItem found = null; //Matching nodes are always elements (testmodule, testcase, variation) while (xmlnode.NodeType != XmlNodeType.Element) { xmlnode = xmlnode.Parent; } //Note: We actually placed a uniqueid in the XmlElement node itself (derived node type) CXmlElement element = xmlnode as CXmlElement; if (element != null) { found = (TestItem)puniqueids[element.UserData]; } return(found); }