ReadAttributeValue() public method

public ReadAttributeValue ( ) : bool
return bool
 internal int AppendAttributeValue(XmlTextReader reader)
 {
     int num = 0;
     char quoteChar = reader.QuoteChar;
     if ((quoteChar != '"') && (quoteChar != '\''))
     {
         quoteChar = '"';
     }
     num += this.Write(quoteChar);
     while (reader.ReadAttributeValue())
     {
         if (reader.NodeType == XmlNodeType.Text)
         {
             num += this.AppendEscapeXmlString(reader.Value, true, quoteChar);
         }
         else
         {
             num += this.AppendEntityRef(reader.Name);
         }
     }
     return (num + this.Write(quoteChar));
 }
Example #2
0
        internal int AppendAttributeValue(XmlTextReader reader)
        {
            int charactersWritten = 0;
            char quote = reader.QuoteChar;

            // In !DOCTYPE, quote is '\0' for second public attribute. 
            // Protect ourselves from writing invalid XML by always
            // supplying a valid quote char.
            if ((quote != '"') && (quote != '\'')) quote = '"';

            charactersWritten += Write(quote);
            while (reader.ReadAttributeValue())
                if (reader.NodeType == XmlNodeType.Text)
                    charactersWritten += AppendEscapeXmlString(reader.Value, true, quote);
                else charactersWritten += AppendEntityRef(reader.Name);

            charactersWritten += Write(quote);
            return charactersWritten;
        }
		public void PreserveEntity ()
		{
			string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'><!ENTITY ent 'entity string'>";
			string dtd = "<!DOCTYPE root [" + intSubset + "]>";
			string xml = dtd + "<root foo='&ent;' bar='internal &ent; value' />";
			XmlTextReader dvr = new XmlTextReader (xml, XmlNodeType.Document, null);
			dvr.EntityHandling = EntityHandling.ExpandCharEntities;
			dvr.Read ();	// DTD
			dvr.Read ();
			AssertEquals (XmlNodeType.Element, dvr.NodeType);
			AssertEquals ("root", dvr.Name);
			Assert (dvr.MoveToFirstAttribute ());
			AssertEquals ("foo", dvr.Name);
			// MS BUG: it returns "entity string", however, entity should not be exanded.
			AssertEquals ("&ent;", dvr.Value);
			//  ReadAttributeValue()
			Assert (dvr.ReadAttributeValue ());
			AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);
			AssertEquals ("ent", dvr.Name);
			AssertEquals ("", dvr.Value);
			Assert (!dvr.ReadAttributeValue ());

			// bar
			Assert (dvr.MoveToNextAttribute ());
			AssertEquals ("bar", dvr.Name);
			AssertEquals ("internal &ent; value", dvr.Value);
			//  ReadAttributeValue()
			Assert (dvr.ReadAttributeValue ());
			AssertEquals (XmlNodeType.Text, dvr.NodeType);
			AssertEquals ("", dvr.Name);
			AssertEquals ("internal ", dvr.Value);
			Assert (dvr.ReadAttributeValue ());
			AssertEquals (XmlNodeType.EntityReference, dvr.NodeType);
			AssertEquals ("ent", dvr.Name);
			AssertEquals ("", dvr.Value);
			Assert (dvr.ReadAttributeValue ());
			AssertEquals (XmlNodeType.Text, dvr.NodeType);
			AssertEquals ("", dvr.Name);
			AssertEquals (" value", dvr.Value);

		}
		public void AttributeWithEntityReference ()
		{
			string xml = @"<a value='hello &ent; world' />";
			XmlReader xmlReader =
				new XmlTextReader (new StringReader (xml));
			xmlReader.Read ();
			xmlReader.MoveToFirstAttribute ();
			xmlReader.ReadAttributeValue ();
			AssertEquals ("hello ", xmlReader.Value);
			Assert (xmlReader.ReadAttributeValue ());
			AssertEquals (XmlNodeType.EntityReference, xmlReader.NodeType);
			AssertEquals ("ent", xmlReader.Name);
			AssertEquals (XmlNodeType.EntityReference, xmlReader.NodeType);
			Assert (xmlReader.ReadAttributeValue ());
			AssertEquals (" world", xmlReader.Value);
			AssertEquals (XmlNodeType.Text, xmlReader.NodeType);
			Assert (!xmlReader.ReadAttributeValue ());
			AssertEquals (" world", xmlReader.Value); // remains
			AssertEquals (XmlNodeType.Text, xmlReader.NodeType);
			xmlReader.ReadAttributeValue ();
			AssertEquals (XmlNodeType.Text, xmlReader.NodeType);
		}
Example #5
0
    public void ReadFromXML(string sFileName)
    {
        m_AnimFrameInfoList.Clear();
        m_AnimFrameInfoList = new List <AnimatedFrameInfo>();

        int iTotalFrames            = 0;
        int iPartialCompletionFrame = 0;
        int iCurrentFrameElement    = 1;

        System.Xml.XmlTextReader XmlReader = new System.Xml.XmlTextReader(sFileName);
        System.Xml.XmlNodeType   XmlType;


        while (XmlReader.Read())
        {
            XmlReader.ReadAttributeValue();
            XmlType = XmlReader.NodeType;


            if (XmlType == System.Xml.XmlNodeType.Element)
            {
                //===========================================
                //          Get Main Info
                //===========================================
                if (XmlReader.Name == "AnimationInfo")
                {
                    iTotalFrames            = Convert.ToInt32(XmlReader.GetAttribute("TotalFrames"));
                    iPartialCompletionFrame = Convert.ToInt32(XmlReader.GetAttribute("PartialAnimationCompletionFrame"));
                    m_bRelativeToScreen     = XmlReader.GetAttribute("RelativeToScreen") == "1";
                }

                //===========================================
                //          Get Frame Info
                //===========================================
                if (XmlReader.Name == "Frame" + iCurrentFrameElement.ToString())
                {
                    AnimatedFrameInfo AFI = new AnimatedFrameInfo();
                    AFI.m_bTintScreen      = XmlReader.GetAttribute("TintScreen") == "1";
                    AFI.m_iTintScreenRed   = Convert.ToInt32(XmlReader.GetAttribute("ScreenTintRed"));
                    AFI.m_iTintScreenGreen = Convert.ToInt32(XmlReader.GetAttribute("ScreenTintGreen"));
                    AFI.m_iTintScreenBlue  = Convert.ToInt32(XmlReader.GetAttribute("ScreenTintBlue"));
                    AFI.m_iTintScreenAlpha = Convert.ToInt32(XmlReader.GetAttribute("ScreenTintAlpha"));

                    AFI.m_bTintCharacter      = XmlReader.GetAttribute("TintCharacter") == "1";
                    AFI.m_iTintCharacterRed   = Convert.ToInt32(XmlReader.GetAttribute("CharacterTintRed"));
                    AFI.m_iTintCharacterGreen = Convert.ToInt32(XmlReader.GetAttribute("CharacterTintGreen"));
                    AFI.m_iTintCharacterBlue  = Convert.ToInt32(XmlReader.GetAttribute("CharacterTintBlue"));

                    AFI.m_iWaitTimeTillNextFrame = Convert.ToInt32(XmlReader.GetAttribute("WaitTillNextFrame"));
                    AFI.m_sSoundFilename         = XmlReader.GetAttribute("SoundFilename");

                    int iTotalSprites = Convert.ToInt32(XmlReader.GetAttribute("TotalSprites"));
                    for (int i = 0; i < iTotalSprites;)
                    {
                        XmlReader.Read();
                        if (XmlReader.Name == "Sprite" + (i + 1).ToString())
                        {
                            SpriteInfo SprInfo = new SpriteInfo();
                            SprInfo.ID          = (uint)AFI.m_SpriteInfoList.Count;
                            SprInfo.TextureName = XmlReader.GetAttribute("TextureName");
                            SprInfo.X           = Convert.ToInt32(XmlReader.GetAttribute("X"));
                            SprInfo.Y           = Convert.ToInt32(XmlReader.GetAttribute("Y"));
                            SprInfo.W           = Convert.ToInt32(XmlReader.GetAttribute("W"));
                            SprInfo.H           = Convert.ToInt32(XmlReader.GetAttribute("H"));

                            // Multiplying By 1000 Because the Game uses a float value of 0-1, whereas this program uses whole pixels.
                            // Therefore it is saved in game format, but when being read back into this program, the float is multiplied
                            // by 1000 to give an integer pass value, which is corrected by a SpriteChecker function outside of this class.
                            int RectX = (int)(Convert.ToDouble(XmlReader.GetAttribute("UVCoordStartX")) * 1000.0);
                            int RectY = (int)(Convert.ToDouble(XmlReader.GetAttribute("UVCoordStartY")) * 1000.0);
                            int RectW = (int)(Convert.ToDouble(XmlReader.GetAttribute("UVCoordEndX")) * 1000.0);
                            int RectH = (int)(Convert.ToDouble(XmlReader.GetAttribute("UVCoordEndY")) * 1000.0);
                            SprInfo.BlitRect = new Rectangle(RectX, RectY, RectW, RectH);

                            AFI.m_SpriteInfoList.Add(SprInfo);
                            i++;
                        }
                    }
                    m_AnimFrameInfoList.Add(AFI);
                    iCurrentFrameElement++;
                }
            }
        }

        //===========================================
        //          Finish Up
        //===========================================
        if ((iPartialCompletionFrame + 1) < m_AnimFrameInfoList.Count)
        {
            m_AnimFrameInfoList.ElementAt(iPartialCompletionFrame - 1).m_bAnimationPartiallyCompleted = true;
        }
        XmlReader.Close();
    }
Example #6
0
		public void XmlDeclarationReadAttributeValue2 ()
		{
			const string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?><hello />";
			var reader = new XmlTextReader (new StringReader (input));
			reader.WhitespaceHandling = WhitespaceHandling.All;
			reader.Read ();
			Assert.IsTrue (reader.MoveToNextAttribute (), "#1a");
			Assert.IsTrue (reader.ReadAttributeValue (), "#1b");
			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#1c");
			Assert.AreEqual ("1.0", reader.Value, "#1d");
			Assert.IsFalse (reader.ReadAttributeValue(), "#1e");

			Assert.IsTrue (reader.MoveToNextAttribute(), "#2a");
			Assert.IsTrue (reader.ReadAttributeValue(), "#2b");
			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2c");
			Assert.AreEqual ("utf-8", reader.Value, "#2d");
			Assert.IsFalse (reader.ReadAttributeValue(), "#2e");

			Assert.IsFalse (reader.MoveToNextAttribute(), "#3");
			Assert.IsFalse (reader.ReadAttributeValue(), "#4");
			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#5");
		}
Example #7
0
		public void XmlDeclarationReadAttributeValue ()
		{
			const string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?><hello />";
			var reader = new XmlTextReader (new StringReader (input));
			reader.WhitespaceHandling = WhitespaceHandling.All;
			reader.Read ();
			
			Assert.AreEqual ("1.0", reader.GetAttribute ("version"), "#0");
			Assert.AreEqual ("utf-8", reader.GetAttribute ("encoding"), "#0-2");

			Assert.IsTrue (reader.MoveToNextAttribute (), "#1");
			Assert.AreEqual ("1.0", reader.Value, "#1-1");
			Assert.IsTrue (reader.ReadAttributeValue (), "#2");
			Assert.AreEqual ("1.0", reader.Value, "#3");
			Assert.IsFalse (reader.ReadAttributeValue (), "#4");

			Assert.IsTrue (reader.MoveToNextAttribute (), "#5");
			Assert.AreEqual ("utf-8", reader.Value, "#5-1");
			Assert.IsTrue (reader.ReadAttributeValue (), "#6");
			Assert.AreEqual ("utf-8", reader.Value, "#7");
			Assert.IsFalse (reader.ReadAttributeValue (), "#8");

			Assert.IsFalse (reader.MoveToNextAttribute (), "#9");
			Assert.IsFalse (reader.ReadAttributeValue (), "#10");
		}
Example #8
0
		public override void Read (XmlTextReader xml, bool start)
		{
			if (CanSerialize) {
				base.Read (xml, start);

				if (start) {
					while (xml.MoveToNextAttribute()) {
						string name = xml.Name;

						xml.ReadAttributeValue();
						Attributes [name] = xml.Value;

						OnAttributeRead (name);
						Logger.Debug (
						        "NoteTag: {0} read attribute {1}='{2}'",
						        ElementName,
						        name,
						        xml.Value);
					}
				}
			}
		}
Example #9
0
    public void ReadFromXML(string sFileName)
    {
        m_lLevelInfoList = new List <List <LevelInfo> >();


        System.Xml.XmlTextReader XmlReader = new System.Xml.XmlTextReader(sFileName);
        System.Xml.XmlNodeType   XmlType;


        while (XmlReader.Read())
        {
            XmlReader.ReadAttributeValue();
            XmlType = XmlReader.NodeType;


            if (XmlType == System.Xml.XmlNodeType.Element)
            {
                //===========================================
                //          Get LevelSize Info
                //===========================================
                if (XmlReader.Name == "LevelSize")
                {
                    m_sTileRows = XmlReader.GetAttribute("Rows");
                    m_sTileCols = XmlReader.GetAttribute("Cols");
                }

                //===========================================
                //          Get Array Info
                //===========================================
                else if (XmlReader.Name == "Row")
                {
                    int ColAmount = Convert.ToInt32(m_sTileCols);
                    List <LevelInfo> LevInfoList = new List <LevelInfo>();
                    for (int i = 0; i < ColAmount; i++)
                    {
                        LevelInfo LevInfo = new LevelInfo(); int CurrentCol = i + 1;
                        LevInfo.X           = (uint)i * 32; LevInfo.Y = (uint)m_lLevelInfoList.Count() * 32; LevInfo.W = 32; LevInfo.H = 32;
                        LevInfo.TextureName = XmlReader.GetAttribute("Col" + CurrentCol.ToString());
                        LevInfoList.Add(LevInfo);
                    }
                    m_lLevelInfoList.Add(LevInfoList);
                }

                //===========================================
                //         Get Background Image Info
                //===========================================
                else if (XmlReader.Name == "BackgroundImage")
                {
                    m_sBackgroundImageName       = XmlReader.GetAttribute("Name");
                    m_sFullPathToBackgroundImage = XmlReader.GetAttribute("FullPath");
                }

                //===========================================
                //          Get Audio Info
                //===========================================
                else if (XmlReader.Name == "AudioName")
                {
                    m_sAudioName      = XmlReader.GetAttribute("Name");
                    m_sAudioLoopStart = XmlReader.GetAttribute("LoopStart");
                    m_sAudioLoopEnd   = XmlReader.GetAttribute("LoopEnd");
                }
                //===========================================
                //          Get Weather Info
                //===========================================
                else if (XmlReader.Name == "EffectOne")
                {
                    m_sWeatherEffectOne        = XmlReader.GetAttribute("Type");
                    m_sPowerOfWeatherEffectOne = XmlReader.GetAttribute("Power");
                }
                else if (XmlReader.Name == "EffectTwo")
                {
                    m_sWeatherEffectTwo        = XmlReader.GetAttribute("Type");
                    m_sPowerOfWeatherEffectTwo = XmlReader.GetAttribute("Power");
                }
            }
        }

        //===========================================
        //          Finish Up
        //===========================================
        XmlReader.Close();
    }
Example #10
0
        protected void Recurse(XmlTextReader reader, Menu root)
        {
            String inner = reader.ReadInnerXml();

              NameTable nt = new NameTable();
              XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
              XmlParserContext ctxt = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
              XmlTextReader reader2 = new XmlTextReader(inner, XmlNodeType.Element, ctxt);

              while (reader2.Read())
              {
            if (reader2.NodeType == XmlNodeType.Element)
            {
              switch (reader2.LocalName)
              {
            case "menu":
              // Menuitem. Find the name, accesskey, command and id strings
              String[] values = new String[3] {"", "", ""};
              String[] names = new String[3] {"label", "accesskey", "command"};
              for (int i = 0; i < names.Length; ++i)
              {
                if (reader2.MoveToAttribute(names[i]) &&
                  reader2.ReadAttributeValue())
                  values[i] = reader2.Value; // XXX need to handle entities
                reader2.MoveToElement();
              }

              // Handle Accesskey
              values[0] = ManticoreMenuItem.GenerateAccessKeyString(values[0], values[1]);

              // Create menu item and attach an event handler
              // BLUESKY - should we support data stored in the XML file as an attribute?
              mCurrentMenuItem = new ManticoreMenuItem(values[0],
                                                       new EventHandler(OnCommandInternal),
                                                       values[2], "");
              if (values[2] != "")
                mItems.Add(values[2], mCurrentMenuItem);
              root.MenuItems.Add(mCurrentMenuItem);
              Recurse(reader2, mCurrentMenuItem);
              break;
            case "menuseparator":
              mCurrentMenuItem = new MenuItem("-");
              root.MenuItems.Add(mCurrentMenuItem);
              break;
            case "menubuilder":
              String id = "";
              if (reader2.MoveToAttribute("id") &&
                  reader2.ReadAttributeValue())
                id = reader2.Value;
              reader2.MoveToElement();
              String datastore = "";
              if (reader2.MoveToAttribute("datastore") &&
                  reader2.ReadAttributeValue())
                datastore = reader2.Value;

              BaseMenuBuilder builder = new BaseMenuBuilder(mMainMenu, root as MenuItem, mCurrentMenuItem, null);
              builder.Root = id;
              builder.DataStore = DataStoreRegistry.GetDataStore(datastore);
              builder.DataStore.AddObserver(builder);
              builder.OnCommand += new EventHandler(OnCommandInternal);
              mBuilders.Add(builder.GetHashCode(), builder);
              break;
              }
            }
              }
        }
Example #11
0
 /// <summary>
 /// Fill the list with source
 /// </summary>
 /// <param name="XmlSourceFile"></param>
 public void FillList(string XmlSourceFile)
 {
     XmlTextReader XmlReader=new XmlTextReader(XmlSourceFile);
     while (XmlReader.Read())
     {
         if(XmlReader.HasAttributes & XmlReader.NodeType==System.Xml.XmlNodeType.Element)
         {
             if(XmlReader[0].ToUpper() != "ISO")
             {
                 this._SourceList.Add(XmlReader[1]);
             }
         }
         XmlReader.ReadAttributeValue();
     }
 }
Example #12
0
 // Read the next attribute value in the input stream.
 public override bool ReadAttributeValue()
 {
     return(reader.ReadAttributeValue());
 }
Example #13
0
        public void Build(Object sender, EventArgs e)
        {
            XmlTextReader reader;
              reader = new XmlTextReader(mToolbarFile);
              reader.WhitespaceHandling = WhitespaceHandling.None;
              reader.MoveToContent();

              bool shouldBuildNewRow = true;

              while (reader.Read())
              {
            if (reader.NodeType == XmlNodeType.Element)
            {
              switch (reader.LocalName)
              {
            case "toolstrip":
              // The next <toolbar/> we encounter should be created on a new row.
              shouldBuildNewRow = true;
              break;
            case "toolbar":
              String[] tbvalues = new String[4] {"", "", "",  ""};
              String[] tbnames = new String[4] {"id", "label", "description", "visible"};
              for (int i = 0; i < tbnames.Length; ++i)
              {
                if (reader.MoveToAttribute(tbnames[i]) &&
                  reader.ReadAttributeValue())
                  tbvalues[i] = reader.Value; // XXX need to handle entities
                reader.MoveToElement();
              }

              String key = tbvalues[0];
              String label = tbvalues[1];
              bool visible = tbvalues[3] == "true";

              // Create and add a new toolbar.
              mToolBar.Appearance = ToolBarAppearance.Flat;
              mToolBar.ButtonClick += new ToolBarButtonClickEventHandler(this.OnCommand);
              mForm.Controls.Add(mToolBar);

              //mCoolBar.Bands.Add(-1, key, label, new Object(), true, mToolBar, true);

              shouldBuildNewRow = false;
              break;
            case "toolbarseparator":
            {
              if (mToolBar != null)
              {
                ToolBarButton button = new ToolBarButton();
                button.Style = ToolBarButtonStyle.Separator;
                mToolBar.Buttons.Add(button);
              }
              break;
            }
            case "toolbarbutton":
            {
              if (mToolBar != null)
              {
                String[] tbbvalues = new String[3] {"", "", ""};
                String[] tbbnames = new String[3] {"label", "icon", "command"};
                for (int i = 0; i < tbbnames.Length; ++i)
                {
                  if (reader.MoveToAttribute(tbbnames[i]) &&
                    reader.ReadAttributeValue())
                    tbbvalues[i] = reader.Value; // XXX need to handle entities
                  reader.MoveToElement();
                }

                ToolBarButton button = new CommandButtonItem(tbbvalues[1]);
                button.Text = tbbvalues[0];
                mToolBar.Buttons.Add(button);
              }
              break;
            }
              }
            }
              }
        }
Example #14
0
        private void CatListRecurse(XmlTextReader aReader, Object aRootNode)
        {
            String inner = aReader.ReadInnerXml();

              NameTable nt = new NameTable();
              XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
              XmlParserContext ctxt = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
              XmlTextReader reader2 = new XmlTextReader(inner, XmlNodeType.Element, ctxt);

              TreeNode node;

              while (reader2.Read()) {
            if (reader2.NodeType == XmlNodeType.Element) {
              switch (reader2.LocalName) {
              case "panel":
            // Tree node with children. Retrieve label and id. Label is
            // used for visual presentation, id is hashed against node
            // and is used as a key when looking for which panel to
            // load.
            String[] values = new String[2] {"", ""};
            String[] names = new String[2] {"label", "id"};
            for (int i = 0; i < names.Length; ++i) {
              if (reader2.MoveToAttribute(names[i]) &&
                reader2.ReadAttributeValue())
                values[i] = reader2.Value;
              reader2.MoveToElement();
            }

            node = new TreeNode(values[0], 0, 0);
            if (aRootNode is TreeView) {
              TreeView rootView = aRootNode as TreeView;
              rootView.Nodes.Add(node);
            }
            else if (aRootNode is TreeNode) {
              TreeNode rootNode = aRootNode as TreeNode;
              rootNode.Nodes.Add(node);
            }

            mNodes.Add(node.GetHashCode(), values[1]);
            CatListRecurse(reader2, node);
            break;
              }
            }
              }
        }
		/// <summary>
		/// 
		/// </summary>
		/// <param name="r"></param>
		/// <param name="t"></param>
		/// <returns></returns>
		public object DeserializeGraph(XmlTextReader r, Type t) 
		{
			object o = t.Assembly.CreateInstance(t.FullName);
			string InstanceName = r.Name;
			int i = 0;

			if(o.GetType().BaseType == typeof(System.Collections.CollectionBase))
			{
				o = DeserializeCollection(r, t);
			}

			PropertyInfo[] properties = o.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
			
			#region Handle XmlRoot attributes
			if(r.HasAttributes) 
			{
				while(r.MoveToNextAttribute() && i < properties.Length) 
				{
					object[] butes = properties[i].GetCustomAttributes(false);
					object bute = null;
					if(butes.Length > 0)
						bute = butes[0];

					PropertyInfo property = null;

					if(r.Name == (bute as XmlAttributeAttribute).AttributeName) 
					{
						property = properties[i];
					}
					else 
					{
						property = t.GetProperty(r.Name);
					}

					if(property.PropertyType.Name == "String") 
					{
						// We have a string
						r.ReadAttributeValue();
						string s = r.Value;
						if(property.CanWrite)
							property.SetValue(o, s, null);
					}
					i++;
				}
			}
			#endregion

			while(r.Read() && i < properties.Length) 
			{
				if((r.Name == InstanceName) && (r.NodeType == XmlNodeType.EndElement)) 
				{
					break;
				}

				object[] attribs = properties[i].GetCustomAttributes(false);
				object attrib = null;

				if(attribs.Length > 0)
					attrib = attribs[0];		
	
				if(r.HasAttributes) 
				{
					r.MoveToFirstAttribute();
					while(r.HasAttributes) 
					{
						PropertyInfo property = null;

						if(r.Name == (attrib as XmlAttributeAttribute).AttributeName) 
						{
							property = properties[i];
						}
						else 
						{
							property = t.GetProperty(r.Name);
						}

						if(property.PropertyType.Name == "String") 
						{
							// We have a string
							r.ReadAttributeValue();
							string s = r.Value;
							if(property.CanWrite)
								property.SetValue(o, s, null);
						}
						i++;
					}
				}
				else if((r.NodeType == XmlNodeType.Element)) 
				{
					
					if(r.IsEmptyElement) 
					{
						i++;
						continue;
					}

					PropertyInfo property = null;					
					if(attrib == null) 
					{
						property = t.GetProperty(r.Name);
						if(property == null)
							continue;
					}
					else 
					{
						if(attrib.GetType() == typeof(XmlElementAttribute))
						{
							if(r.Name == (attrib as XmlElementAttribute).ElementName)
							{
								property = properties[i]; 	i++;
							}
							else
								continue;
						}
						else if(attrib.GetType() == typeof(XmlAttributeAttribute))
						{
							if(r.Name == (attrib as XmlAttributeAttribute).AttributeName)
							{
								property = properties[i]; 	i++;
							}
							else
								continue;
						}
						else if(attrib.GetType() == typeof(XmlRootAttribute))
						{
							if(r.Name == (attrib as XmlRootAttribute).ElementName)
							{
								property = properties[i]; 	i++;
							}
							else
								continue;
						}
					}
										
					if(property.PropertyType.BaseType == typeof(System.Collections.CollectionBase)) 
					{
						// We have a collection
						property.SetValue(o, DeserializeCollection(r, property.PropertyType),null);
					}
					else if(property.PropertyType.Name == "String") 
					{
						// We have a string
						r.Read();
						string s = r.Value;
						if(property.CanWrite)
							property.SetValue(o, s, null);
					}
					else if(property.PropertyType.IsValueType) 
					{
						// We have a value type
						object oVal = null;
						if ( typeof(IConvertible).IsAssignableFrom(property.PropertyType) )
						{
							r.Read();
							string s = r.Value;
							if ( property.PropertyType.IsEnum )
							{
								try 
								{ 
									oVal = Enum.ToObject(property.PropertyType, Convert.ToInt32(s));
								} 
								catch(InvalidCastException) 
								{
								}
							}
							else
							{

								try { oVal = Convert.ChangeType(s, property.PropertyType, null); } 
								catch(InvalidCastException) 
								{
									try { oVal = Convert.ChangeType(s, property.PropertyType.BaseType, null); }
									catch(InvalidCastException) { continue; }
								}
							}
						}
						else if ( !property.PropertyType.IsPrimitive )
						{
							oVal = DeserializeGraph(r, property.PropertyType);
						}
						if ( oVal != null )
							property.SetValue(o, oVal, null);
					}
					else if(t.Assembly.GetType(property.PropertyType.FullName, false) != null) 
					{
						// We have a type in the current assembly. Recurse.
						object val = DeserializeGraph(r, property.PropertyType);						
						property.SetValue(o,val, null);
					}
					else 
					{
						throw new NotSupportedException("Cannot deserialize to " + property.PropertyType.FullName + ".");
					}
				}
				else if(r.NodeType == XmlNodeType.Text)
				{
					PropertyInfo property = properties[i];
					i++;

					if(property.PropertyType.Name == "String") 
					{
						// We have a string
						//r.Read();
						string s = r.Value;
						if(property.CanWrite)
							property.SetValue(o, s, null);
					}
				}
			}
			return o;
		}