Inheritance: NSObject, IContentHandler
        public void ParserDidStartElement(NSXMLParser parser, NSString elementName, NSString namespaceURI, NSString qualifiedName, NSDictionary attributeDict)
        {
            GSXibElement element = GSXibElement.Alloc().InitWithTypeAndAttributes(elementName, attributeDict); //andAttributes: attributeDict];
            NSString key = (NSString)attributeDict.ObjectForKey((NSString)@"key");
            NSString refId = (NSString)attributeDict.ObjectForKey((NSString)@"id");

            if (key != null)
            {
                if (CurrentElement != null)
                {
                    CurrentElement.SetElementForKey(element, key);
                }
            }
            else
            {
                // For Arrays
                if (CurrentElement != null)
                {
                    CurrentElement.AddElement(element);
                }
            }
            if (refId != null)
            {
                Objects.SetObjectForKey(element, refId);
            }

             if (!@"archive".IsEqualToString(elementName) &&
                 !@"data".IsEqualToString(elementName))
             {
                 // only used for the root element
                 // push
                 Stack.AddObject(CurrentElement);
             }

             if (!@"archive".IsEqualToString(elementName))
             {
                 CurrentElement = element;
             }
        }
        public void ParserFoundCharacters(NSXMLParser parser, NSString foundCharacters)
        {
            //string chars = foundCharacters.Value.Replace("\n", "\\n");
            //chars = chars.Replace("\r", "\\r");
            //chars = chars.Replace("\t", "\\t");
            //_tw.WriteLine("parser:foundCharacters: " + chars);

            if (CurrentElement != null)
            {
                CurrentElement.Value = foundCharacters;
            }
        }
 public void ParserDidEndElement(NSXMLParser parser, NSString elementName, NSString namespaceURI, NSString qualifiedName)
 {
     if (!@"archive".IsEqualToString(elementName) &&
          !@"data".IsEqualToString(elementName))
     {
          // pop
         CurrentElement = (GSXibElement)Stack.LastObject();
         Stack.RemoveLastObject();
     }
 }