[Mono-devel-list] System.Xml.XmlAttribute.Specified should not be default True

Atsushi Eno atsushi at ximian.com
Mon Jan 12 22:25:54 EST 2004


Hello,

Thanks. I found this patch arose some event bugs and it looks not so 
easy to fix soon, but this patch should be applied.

Atsushi Eno

Boris Kirzner wrote:
> Hello
> 
> The Specified attribute for an System.Xml.XmlAttribute node should be 
> set to False if the attribute was not explicitly given a value.
> 
> Steps to reproduce the problem :
> 1. Create DTD file defining some node having default attribute value.
> 2. Create XML file referencing the DTD, with node inside that attribute 
> value having default in DTD is not explicitly specified.
> 3. Load XML document into XmlDocument
> 4. Inspect Specified property of the attribute.
> 
> Actual result :
> True
> 
> Expected result :
> False
> 
> Enclosed is a small test case and a patch.
> 
> Thank you in advance,
> 
> Boris Kirzner
> 
> 
> ------------------------------------------------------------------------
> 
> <?xml version="1.0"?>
> <!DOCTYPE staff SYSTEM "staff.dtd"[]>
> <staff>
>  <employee>
>   <address>1230 North Ave. Dallas, Texas 98551</address>
>  </employee>
>  </staff>
> 
> 
> ------------------------------------------------------------------------
> 
> using System;
> using System.Xml;
> 
> public	class Test
> 	{
> 		static void Main(string[] args)
> 		{
> 			XmlDocument doc = new XmlDocument();
> 			doc.Load("staff.xml");
> 			XmlNodeList nodeList = doc.DocumentElement.GetElementsByTagName("employee");
> 			System.Xml.XmlElement testNode = (System.Xml.XmlElement)nodeList.Item(0).ChildNodes.Item(0);
> 			XmlAttribute streetAttr = (System.Xml.XmlAttribute)testNode.Attributes.GetNamedItem("street");
> 			Console.WriteLine(streetAttr.Specified.ToString());
> 		}
> 	}
> 
> 
> 
> ------------------------------------------------------------------------
> 
> --- old\XmlElement.cs	2004-01-12 18:38:28.000000000 +0200
> +++ new\XmlElement.cs	2004-01-12 18:14:27.992210100 +0200
> @@ -66,7 +66,10 @@
>  					for (int i = 0; i < attlist.Definitions.Count; i++) {
>  						DTDAttributeDefinition def = attlist [i];
>  						if (def.DefaultValue != null)
> +						{
>  							SetAttribute (def.Name, def.DefaultValue);
> +							attributes[def.Name].SetDefault();
> +						}							
>  					}
>  				}
>  			}





More information about the Mono-devel-list mailing list