Forráskód Böngészése

2003-04-23 Atsushi Enomoto <[email protected]>

	* Added missing ChangeLog of 4/4/2003.
	* XmlTextWriter.cs : patch by Erik. fixed WriteQualifiedName.
	  (write prefix instead of ns.)
	* XmlInputStream.cs : file access mode fix (FileAccess.Read was missing)
	* XmlTextReader.cs : modified to call Read() instead of ReadContent().
	  (It may be required for decorated reader such as XmlValidatingReader.)
	  Changed Read() error message for mismatch end tag.
	* XmlDocument.cs : (ReadNode) friendly message for mismatch EndElement.
	* XmlReader.cs : Corrected misinterpreted MoveToContent() method.

svn path=/trunk/mcs/; revision=13901
Atsushi Eno 23 éve
szülő
commit
ae5864eff3

+ 24 - 0
mcs/class/System.XML/System.Xml/ChangeLog

@@ -1,3 +1,27 @@
+2003-04-23  Atsushi Enomoto <[email protected]>
+
+	* Added missing ChangeLog of 4/4/2003.
+	* XmlTextWriter.cs : patch by Erik. fixed WriteQualifiedName.
+	  (write prefix instead of ns.)
+	* XmlInputStream.cs : file access mode fix (FileAccess.Read was missing)
+	* XmlTextReader.cs : modified to call Read() instead of ReadContent().
+	  (It may be required for decorated reader such as XmlValidatingReader.)
+	  Changed Read() error message for mismatch end tag.
+	* XmlDocument.cs : (ReadNode) friendly message for mismatch EndElement.
+	* XmlReader.cs : Corrected misinterpreted MoveToContent() method.
+
+2003-04-04  Atsushi Enomoto <[email protected]>
+
+	* XmlDocument.cs : Load() now closes the given XmlReader.
+	  Don't allow creation of XmlTextReader for Doctype. (workaround.)
+	* XmlInputStream.cs : It now closes its internal stream explicitly.
+	* XmlNode.cs : RemoveChild() bugfix for removing LastLinkedChild.
+	* XmlNodeReader.cs : GetAttribute() bugfix for not-present attribute.
+	* XmlParserInput.cs : added Close() method.
+	* XmlReader.cs : MoveToContent() should (1) not Read in case of empty
+	  element, and (2) MoveToElement() in case of attribute.
+	* XmlTextReader.cs : Close() now actually closes source TextReaders.
+
 2003-03-26  Duncan Mak  <[email protected]>
 
 	* XmlTextWriter.cs (Write): A patch from Atsushi to fix

+ 16 - 5
mcs/class/System.XML/System.Xml/XmlDocument.cs

@@ -665,7 +665,7 @@ namespace System.Xml
 			if(reader.NodeType == XmlNodeType.Element)
 				reader.MoveToFirstAttribute ();
 			else if(reader.NodeType != XmlNodeType.Attribute)
-				throw new InvalidOperationException ("bad position to read attribute.");
+				throw new InvalidOperationException (MakeReaderErrorMessage ("bad position to read attribute.", reader));
 			XmlAttribute attribute = CreateAttribute (reader.Prefix, reader.LocalName, reader.NamespaceURI);
 			ReadAttributeNodeValue (reader, attribute);
 			return attribute;
@@ -745,8 +745,10 @@ namespace System.Xml
 					break;
 
 				case XmlNodeType.EndElement:
-					if(currentNode == null || currentNode.Name != reader.Name)
-						throw new XmlException ("mismatch end tag.");
+					if (currentNode == null)
+						throw new XmlException ("Unexpected end element.");
+					else if (currentNode.Name != reader.Name)
+						throw new XmlException (MakeReaderErrorMessage (String.Format ("mismatch end tag. Expected {0} but found {1}", currentNode.Name, reader.Name), reader));
 					currentNode = currentNode.ParentNode;
 					break;
 
@@ -770,7 +772,7 @@ namespace System.Xml
 					newNode = CreateXmlDeclaration ("1.0" , String.Empty, String.Empty);
 					((XmlDeclaration)newNode).Value = reader.Value;
 					if(currentNode != null)
-						throw new XmlException ("XmlDeclaration at invalid position.");
+						throw new XmlException (MakeReaderErrorMessage ("XmlDeclaration at invalid position.", reader));
 					break;
 
 				case XmlNodeType.DocumentType:
@@ -789,7 +791,7 @@ namespace System.Xml
 						newNode = ReadDoctypeNode (xtReader);
 					}
 					if(currentNode != null)
-						throw new XmlException ("XmlDocumentType at invalid position.");
+						throw new XmlException (this.MakeReaderErrorMessage ("XmlDocumentType at invalid position.", reader));
 					break;
 
 				case XmlNodeType.EntityReference:
@@ -823,6 +825,15 @@ namespace System.Xml
 			return resultNode != null ? resultNode : newNode;
 		}
 
+		private string MakeReaderErrorMessage (string message, XmlReader reader)
+		{
+			IXmlLineInfo li = reader as IXmlLineInfo;
+			if (li != null)
+				return String.Format ("{0} Line number = {1}, Inline position = {2}.", li.LineNumber, li.LinePosition);
+			else
+				return message;
+		}
+
 		private XmlDocumentType ReadDoctypeNode (XmlTextReader xtReader)
 		{
 			XmlDocumentType doctype = CreateDocumentType (xtReader.Name,

+ 1 - 1
mcs/class/System.XML/System.Xml/XmlInputStream.cs

@@ -84,7 +84,7 @@ namespace Mono.Xml.Native
 				Uri uri = new Uri (url);
 				Initialize (new MemoryStream (new System.Net.WebClient ().DownloadData (url)));
 			} catch (UriFormatException ex) {
-				Initialize (new FileStream (url, FileMode.Open));
+				Initialize (new FileStream (url, FileMode.Open, FileAccess.Read));
 			}
 #else
 			Initialize (new FileStream (url, FileMode.Open, FileAccess.Read));

+ 15 - 15
mcs/class/System.XML/System.Xml/XmlReader.cs

@@ -188,22 +188,22 @@ namespace System.Xml
 
 		public virtual XmlNodeType MoveToContent ()
 		{
-			XmlNodeType nodeType = NodeType;
-			if (IsEmptyElement)
-				return nodeType;
-
-			if (nodeType == XmlNodeType.Attribute) {
-				MoveToElement ();
-				return nodeType;
-			}
-
+			bool loop = true;
 			do {
-				Read ();
-				nodeType = NodeType;
-				if (IsContent (nodeType))
-					return nodeType;
-			} while (ReadState != ReadState.EndOfFile);
-			
+				switch (NodeType) {
+				case XmlNodeType.XmlDeclaration:
+				case XmlNodeType.DocumentType:
+				case XmlNodeType.ProcessingInstruction:
+				case XmlNodeType.Comment:
+				case XmlNodeType.Whitespace:
+				case XmlNodeType.SignificantWhitespace:
+					Read ();
+					break;
+				default:
+					loop = false;
+					break;
+				}
+			} while (!EOF && loop);
 			return XmlNodeType.None;
 		}
 

+ 5 - 3
mcs/class/System.XML/System.Xml/XmlTextReader.cs

@@ -598,7 +598,8 @@ namespace System.Xml
 					innerXmlBuilder = new StringBuilder ();
 				innerXmlBuilder.Length = 0;
 				do {
-					ReadContent ();
+//					ReadContent ();
+					Read ();
 					if (NodeType != XmlNodeType.EndElement || depth + 1 > startDepth)
 						innerXmlBuilder.Append (currentTag);
 				} while (depth >= startDepth);
@@ -1079,8 +1080,9 @@ namespace System.Xml
 			string name = ReadName ();
 			if (elementStack.Count == 0)
 				throw ReaderError("closing element without matching opening element");
-			if ((string)elementStack.Pop() != name)
-				throw ReaderError("unmatched closing element");
+			string expected = (string)elementStack.Pop();
+			if (expected != name)
+				throw ReaderError(String.Format ("unmatched closing element: expected {0} but found {1}", expected, name));
 			baseURIStack.Pop ();
 
 			SkipWhitespace ();

+ 3 - 2
mcs/class/System.XML/System.Xml/XmlTextWriter.cs

@@ -493,9 +493,10 @@ namespace System.Xml
 				throw new ArgumentException ();
 
 			CheckState ();
-			w.Write ("{0}:{1}", ns, localName);
-		}
 
+			string prefix = namespaceManager.LookupPrefix (ns);
+			w.Write ("{0}:{1}", prefix, localName);
+		}
 		public override void WriteRaw (string data)
 		{
 			WriteStringInternal (data, false);