Click here to Skip to main content
15,897,334 members
Articles / Programming Languages / XSLT

Generic Data Points Series XML format and its validated loading with LINQ to XML

Rate me:
Please Sign up or sign in to vote.
4.67/5 (3 votes)
24 Apr 2009CPOL13 min read 24.5K   101   7  
How to express a series of generic data points in XML and read them without much pain.
// <copyright file="DefaultXmlToCLRTypeMapping.cs" company="Oleg V. Polikarpotchkin">
// Copyright © 2009 Oleg V. Polikarpotchkin. All Right Reserved
// </copyright>
// <author>Oleg V. Polikarpotchkin</author>
// <email>ov-p@yandex.ru</email>
// <date>2009-04-09</date>
// <summary>Maps XML type to CLR type using default MS mapping.</summary>

using System;
using System.Xml;

namespace XmlDataPointSeries
{
	/// <summary>
	/// Maps XML type to CLR type using default MS mapping.
	/// </summary>
	public static class DefaultXmlToCLRTypeMapping
	{
		/// <summary>
		/// Converts the XML type to the CLR type.
		/// </summary>
		/// <param name="xsdType">XML type name.</param>
		/// <returns></returns>
		public static Type FromXmlType(string xsdType)
		{
			switch (xsdType)
			{
				// xs types (http://www.w3.org/2001/XMLSchema)
				case "anyURI":
					return typeof(Uri);
				case "base64Binary":
					return typeof(Byte[]);
				case "boolean":
					return typeof(Boolean);
				case "byte":
					return typeof(SByte);
				case "date":
					return typeof(DateTime);
				case "dateTime":
					return typeof(DateTime);
				case "decimal":
					return typeof(Decimal);
				case "double":
					return typeof(Double);
				case "duration":
					return typeof(TimeSpan);
				case "ENTITIES":
					return typeof(String[]);
				case "ENTITY":
					return typeof(String);
				case "float":
					return typeof(Single);
				case "gDay":
					return typeof(DateTime);
				case "gMonthDay":
					return typeof(DateTime);
				case "gYear":
					return typeof(DateTime);
				case "gYearMonth":
					return typeof(DateTime);
				case "hexBinary":
					return typeof(Byte[]);
				case "ID":
					return typeof(String);
				case "IDREF":
					return typeof(String);
				case "IDREFS":
					return typeof(String[]);
				case "int":
					return typeof(Int32);
				case "integer":
					return typeof(Decimal);
				case "language":
					return typeof(String);
				case "long":
					return typeof(Int64);
				case "gMonth":
					return typeof(DateTime);
				case "Name":
					return typeof(String);
				case "NCName":
					return typeof(String);
				case "negativeInteger":
					return typeof(Decimal);
				case "NMTOKEN":
					return typeof(String);
				case "NMTOKENS":
					return typeof(String[]);
				case "nonNegativeInteger":
					return typeof(Decimal);
				case "nonPositiveInteger":
					return typeof(Decimal);
				case "normalizedString":
					return typeof(String);
				case "NOTATION":
					return typeof(XmlQualifiedName);
				case "positiveInteger":
					return typeof(Decimal);
				case "QName":
					return typeof(XmlQualifiedName);
				case "short":
					return typeof(Int16);
				case "string":
					return typeof(String);
				case "time":
					return typeof(DateTime);
				case "token":
					return typeof(String);
				case "unsignedByte":
					return typeof(Byte);
				case "unsignedInt":
					return typeof(UInt32);
				case "unsignedLong":
					return typeof(UInt64);
				case "unsignedShort":
					return typeof(UInt16);
				case "anySimpleType":
					return typeof(String);
				// xdt types (http://www.w3.org/2003/05/xpath-datatypes)
				case "dayTimeDuration":
					return typeof(TimeSpan);
				case "yearMonthDuration":
					return typeof(TimeSpan);
				case "untypedAtomic":
					return typeof(String);
				case "anyAtomicType":
					return typeof(Object);
			}
			return null;
//Document node - XPathNavigator
//Element node - XPathNavigator
//Attribute node - XPathNavigator
//Namespace node - XPathNavigator
//Text node - XPathNavigator
//Comment node - XPathNavigator
//Processing instruction node - XPathNavigator
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader
Russian Federation Russian Federation
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions