/// <summary> /// Create a SmartCard from the information contained in an XmlDocument. /// </summary> /// <param name="xmlDoc">The document to process.</param> /// <returns>A new SmartCard built from the XmlDocument.</returns> /// <exception cref="InvalidSmartCardException"> /// If the deserialization of the smartcard failed for some reason. /// </exception> protected SmartCard DeserializeXML(XmlDocument xmlDoc) { SmartCard smartCard; XmlNode rootNode; XmlNodeList nodeList; XmlAttribute attrNode; ISerializer serialize; object content; // Make the new smart card. smartCard = new Types.SmartCard(); // Get the root node. rootNode = xmlDoc.DocumentElement; if (rootNode == null) { return(smartCard); } // Get the smart card node. nodeList = xmlDoc.GetElementsByTagName("sc"); if (nodeList.Count > 0) { // Get the part number attribute. attrNode = ( XmlAttribute )nodeList[0].Attributes.GetNamedItem("pn"); if (attrNode != null) { smartCard.PartNumber = attrNode.Value; } // Get the program date attribute. attrNode = ( XmlAttribute )nodeList[0].Attributes.GetNamedItem("pd"); if (attrNode != null) { smartCard.ProgramDate = DateTime.Parse(attrNode.Value); } } try { // Get all of the cylinder content nodes. nodeList = xmlDoc.GetElementsByTagName("c"); foreach (XmlNode child in nodeList) { // Deserialize all of the cylinder children. serialize = new CylinderXMLSerializer(); content = serialize.Deserialize(child.OuterXml); smartCard.Add(content, serialize); } } catch (Exception e) { throw new InvalidSmartCardException(e); } return(smartCard); }