//http://validationframework.codeplex.com/ //License: Microsoft Permissive License (Ms-PL) v1.1 using System; using System.Xml; namespace ValidationFramework.Extensions { public static class XmlElementExtensions { /// <summary> /// Attempts to get and cast attribute from a <see cref="XmlElement"/>. If the item does not exist or can't be casted exceptions are thrown. /// </summary> /// <typeparam name="T">The <see cref="Type"/> to try to convert to.</typeparam> /// <param name="element">The <see cref="XmlElement"/> to extract the attribute value from.</param> /// <param name="key">The key to use or the extraction</param> /// <param name="defaultValue">The default value if <paramref name="key"/> is not found.</param> /// <returns>The value from <paramref name="attributes"/> if <paramref name="key"/> exists; otherwise <paramref name="defaultValue"/>.</returns> /// <exception cref="ArgumentOutOfRangeException"></exception> internal static T GetAttribute<T>(this XmlElement element, string key) { if (!element.HasAttribute(key)) throw new ArgumentOutOfRangeException(string.Format("The key '{0}' cannot be found in xml element.", key)); var stringValue = element.GetAttribute(key); var converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(T)); return (T)converter.ConvertFromString(stringValue); } } }