Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2002-09-19 11:16:01 +0400
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2002-09-19 11:16:01 +0400
commitf9fcc1d75e5141dab7b2e21439d6992fe0487398 (patch)
tree69896090ef6bdb33856141283cdc736c6aa26f01 /mcs/class/System.XML
parent7faec3f1be8ec3d6698184058749d35f9dc44927 (diff)
2002-09-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* XmlCustomFormatter.cs: finished. * XmlSerializationReader.cs: implemented some more methods. svn path=/trunk/mcs/; revision=7611
Diffstat (limited to 'mcs/class/System.XML')
-rwxr-xr-xmcs/class/System.XML/System.Xml.Serialization/ChangeLog5
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs30
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReader.cs187
3 files changed, 162 insertions, 60 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
index e63a8033dc2..92d66f6396a 100755
--- a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
+++ b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
@@ -1,3 +1,8 @@
+2002-09-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * XmlCustomFormatter.cs: finished.
+ * XmlSerializationReader.cs: implemented some more methods.
+
2002-09-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* XmlSerializationReader.cs: implemented a few methods.
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
index 40fa339aab1..90f710fac73 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
@@ -37,17 +37,17 @@ namespace System.Xml.Serialization {
internal static string FromDate (DateTime value)
{
- return XmlConvert.ToString (value, "HH':'mm':'ss'.'fffffffzzz");
+ return XmlConvert.ToString (value, "yyyy-MM-dd");
}
internal static string FromDateTime (DateTime value)
{
- return XmlConvert.ToString (value, "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz");
+ return XmlConvert.ToString (value, "yyyy-MM-ddTHH:mm:ss.fffffffzzz");
}
internal static string FromTime (DateTime value)
{
- return XmlConvert.ToString (value, "yyyy'-'MM'-'dd");
+ return XmlConvert.ToString (value, "HH:mm:ss.fffffffzzz");
}
internal static string FromEnum (long value, string[] values, long[] ids)
@@ -88,52 +88,44 @@ namespace System.Xml.Serialization {
return output.ToString ();
}
- [MonoTODO]
internal static char ToChar (string value)
{
- throw new NotImplementedException ();
+ return (char) XmlConvert.ToUInt16 (value);
}
- [MonoTODO]
internal static DateTime ToDate (string value)
{
- throw new NotImplementedException ();
+ return ToDateTime (value);
}
- [MonoTODO]
internal static DateTime ToDateTime (string value)
{
- throw new NotImplementedException ();
+ return XmlConvert.ToDateTime (value);
}
- [MonoTODO]
internal static DateTime ToTime (string value)
{
- throw new NotImplementedException ();
+ return ToDateTime (value);
}
- [MonoTODO]
internal static string ToXmlName (string value)
{
- throw new NotImplementedException ();
+ return XmlConvert.DecodeName (value);
}
- [MonoTODO]
internal static string ToXmlNCName (string value)
{
- throw new NotImplementedException ();
+ return ToXmlName (value);
}
- [MonoTODO]
internal static string ToXmlNmToken (string value)
{
- throw new NotImplementedException ();
+ return ToXmlName (value);
}
- [MonoTODO]
internal static string ToXmlNmTokens (string value)
{
- throw new NotImplementedException ();
+ return ToXmlName (value);
}
#endregion // Methods
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReader.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReader.cs
index 0b617903e60..1ffff04a79b 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReader.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReader.cs
@@ -22,8 +22,10 @@ namespace System.Xml.Serialization {
XmlReader reader;
ArrayList fixups;
ArrayList collFixups;
- Hashtable readCallbacks = new Hashtable ();
- Hashtable typesCallbacks = new Hashtable ();
+ Hashtable readCallbacks;
+ Hashtable typesCallbacks;
+ ArrayList noIDTargets;
+ Hashtable targets;
string w3SchemaNS;
string w3SchemaNS2000;
@@ -62,6 +64,20 @@ namespace System.Xml.Serialization {
InitIDs ();
}
+ private ArrayList EnsureArrayList (ArrayList list)
+ {
+ if (list == null)
+ list = new ArrayList ();
+ return list;
+ }
+
+ private Hashtable EnsureHashtable (Hashtable hash)
+ {
+ if (hash == null)
+ hash = new Hashtable ();
+ return hash;
+ }
+
protected XmlSerializationReader ()
{
}
@@ -84,15 +100,13 @@ namespace System.Xml.Serialization {
protected void AddFixup (CollectionFixup fixup)
{
- if (collFixups == null)
- collFixups = new ArrayList();
+ collFixups = EnsureArrayList (collFixups);
collFixups.Add(fixup);
}
protected void AddFixup (Fixup fixup)
{
- if (fixups == null)
- fixups = new ArrayList();
+ fixups = EnsureArrayList (fixups);
fixups.Add(fixup);
}
@@ -100,31 +114,64 @@ namespace System.Xml.Serialization {
{
XmlNameTable nt = reader.NameTable;
XmlQualifiedName xqn = new XmlQualifiedName (nt.Add (name), nt.Add (ns));
+ readCallbacks = EnsureHashtable (readCallbacks);
readCallbacks.Add (xqn, read);
+ typesCallbacks = EnsureHashtable (typesCallbacks);
typesCallbacks.Add (xqn, type);
}
- [MonoTODO ("Implement")]
protected void AddTarget (string id, object o)
{
- throw new NotImplementedException ();
+ if (id != null) {
+ targets = EnsureHashtable (targets);
+ if (targets [id] == null)
+ targets.Add (id, o);
+ } else {
+ if (o != null)
+ return;
+ noIDTargets = EnsureArrayList (noIDTargets);
+ noIDTargets.Add (o);
+ }
+ }
+
+ private string CurrentTag ()
+ {
+ switch (reader.NodeType) {
+ case XmlNodeType.None:
+ return String.Format ("<{0} xmlns='{1}'>", reader.LocalName,
+ reader.NamespaceURI);
+ case XmlNodeType.Attribute:
+ return reader.Value;
+ case XmlNodeType.Text:
+ return "CDATA";
+ case XmlNodeType.ProcessingInstruction:
+ return "<--";
+ case XmlNodeType.Entity:
+ return "<?";
+ case XmlNodeType.EndElement:
+ return ">";
+ default:
+ return "(unknown)";
+ }
}
- [MonoTODO ("Implement")]
protected Exception CreateAbstractTypeException (string name, string ns)
{
- throw new NotImplementedException ();
+ string message = "Error at " + name + " " + ns + ":" + CurrentTag ();
+ return new InvalidOperationException (message);
}
protected Exception CreateInvalidCastException (Type type, object value)
{
- string message = String.Format ("Cannot assign object of type {0} to an object of type {1}.", value.GetType (), type);
+ string message = String.Format ("Cannot assign object of type {0} to an object of " +
+ "type {1}.", value.GetType (), type);
return new InvalidCastException (message);
}
protected Exception CreateReadOnlyCollectionException (string name)
{
- string message = String.Format ("Could not serialize {0}. Default constructors are required for collections and enumerators.", name);
+ string message = String.Format ("Could not serialize {0}. Default constructors are " +
+ "required for collections and enumerators.", name);
return new InvalidOperationException (message);
}
@@ -134,16 +181,16 @@ namespace System.Xml.Serialization {
return new InvalidOperationException (message);
}
- [MonoTODO ("Implement")]
protected Exception CreateUnknownNodeException ()
{
- throw new NotImplementedException ();
+ string message = "Unknown xml node -> " + CurrentTag ();
+ return new InvalidOperationException (message);
}
- [MonoTODO ("Implement")]
protected Exception CreateUnknownTypeException (XmlQualifiedName type)
{
- throw new NotImplementedException ();
+ string message = "Unknown type " + type.Namespace + ":" + type.Name + " " + CurrentTag ();
+ return new InvalidOperationException (message);
}
protected Array EnsureArrayIndex (Array a, int index, Type elementType)
@@ -224,10 +271,16 @@ namespace System.Xml.Serialization {
throw new NotImplementedException ();
}
- [MonoTODO ("Implement")]
protected XmlQualifiedName ReadElementQualifiedName ()
{
- throw new NotImplementedException ();
+ if (reader.IsEmptyElement) {
+ reader.Skip();
+ return ToXmlQualifiedName (String.Empty);
+ }
+
+ XmlQualifiedName xqn = ToXmlQualifiedName(reader.ReadString ());
+ reader.ReadEndElement ();
+ return xqn;
}
protected void ReadEndElement ()
@@ -242,62 +295,100 @@ namespace System.Xml.Serialization {
}
}
- [MonoTODO ("Implement")]
protected bool ReadNull ()
{
- throw new NotImplementedException ();
+ if (!GetNullAttr ())
+ return false;
+
+ if (reader.IsEmptyElement) {
+ reader.Skip();
+ return true;
+ }
+
+ reader.ReadStartElement();
+ while (reader.NodeType != XmlNodeType.EndElement)
+ UnknownNode (null);
+ ReadEndElement ();
+ return true;
}
- [MonoTODO ("Implement")]
protected XmlQualifiedName ReadNullableQualifiedName ()
{
- throw new NotImplementedException ();
+ if (ReadNull ())
+ return null;
+
+ return ReadElementQualifiedName ();
}
- [MonoTODO ("Implement")]
protected string ReadNullableString ()
{
- throw new NotImplementedException ();
+ if (ReadNull ())
+ return null;
+
+ return reader.ReadElementString ();
}
- [MonoTODO ("Implement")]
protected bool ReadReference (out string fixupReference)
{
- throw new NotImplementedException ();
+ string href = reader.GetAttribute ("href");
+ if (href == null) {
+ fixupReference = null;
+ return false;
+ }
+
+ if (href [0] != '#')
+ throw new InvalidOperationException("href not found: " + href);
+
+ fixupReference = href.Substring (1);
+ if (!reader.IsEmptyElement) {
+ reader.ReadStartElement ();
+ ReadEndElement ();
+ } else {
+ reader.Skip ();
+ }
+ return true;
}
- [MonoTODO ("Implement")]
protected object ReadReferencedElement ()
{
- throw new NotImplementedException ();
+ return ReadReferencedElement (null, null);
}
- [MonoTODO ("Implement")]
protected object ReadReferencedElement (string name, string ns)
{
- throw new NotImplementedException ();
+ string unused;
+ return ReadReferencingElement (name, ns, false, out unused);
}
- [MonoTODO ("Implement")]
protected void ReadReferencedElements ()
{
- throw new NotImplementedException ();
+ string unused;
+
+ reader.MoveToContent();
+ XmlNodeType nt = reader.NodeType;
+ while (nt != XmlNodeType.EndElement && nt != XmlNodeType.None) {
+ ReadReferencingElement (null, null, true, out unused);
+ reader.MoveToContent ();
+ nt = reader.NodeType;
+ }
}
[MonoTODO ("Implement")]
protected object ReadReferencingElement (out string fixupReference)
{
- throw new NotImplementedException ();
+ return ReadReferencingElement (null, null, false, out fixupReference);
}
- [MonoTODO ("Implement")]
protected object ReadReferencingElement (string name, string ns, out string fixupReference)
{
- throw new NotImplementedException ();
+ return ReadReferencingElement (name, ns, false, out fixupReference);
}
- [MonoTODO ("Implement")]
- protected object ReadReferencingElement (string name, string ns, bool elementCanBeType, out string fixupReference)
+ [MonoTODO]
+ protected object ReadReferencingElement (string name,
+ string ns,
+ bool elementCanBeType,
+ out string fixupReference)
{
throw new NotImplementedException ();
}
@@ -322,10 +413,9 @@ namespace System.Xml.Serialization {
throw new NotImplementedException ();
}
- [MonoTODO ("Implement")]
protected XmlNode ReadXmlNode (bool wrapped)
{
- throw new NotImplementedException ();
+ return document.ReadNode (reader);
}
[MonoTODO ("Implement")]
@@ -410,10 +500,25 @@ namespace System.Xml.Serialization {
return XmlCustomFormatter.ToXmlNmTokens (value);
}
- [MonoTODO ("Implement")]
protected XmlQualifiedName ToXmlQualifiedName (string value)
{
- throw new NotImplementedException ();
+ string name;
+ string ns;
+ int lastColon = value.LastIndexOf (':');
+ string decodedValue = XmlConvert.DecodeName (value);
+ if (lastColon < 0) {
+ name = reader.NameTable.Add (decodedValue);
+ ns = reader.LookupNamespace (String.Empty);
+ } else {
+ string prefix = value.Substring (0, lastColon);
+ ns = reader.LookupNamespace (prefix);
+ if (ns == null)
+ throw new InvalidOperationException ("namespace " + prefix + "not defined");
+
+ name = reader.NameTable.Add (value.Substring (lastColon + 1));
+ }
+
+ return new XmlQualifiedName (name, ns);
}
[MonoTODO ("Implement")]