Mercurial > silverbladetech
diff MetroWpf/MetroWpf.Framework/Extensions/XmlNodeExtensions.cs @ 15:060f02cd4591
Initial commit, pre airport work
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Mon, 12 Mar 2012 23:05:21 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MetroWpf/MetroWpf.Framework/Extensions/XmlNodeExtensions.cs Mon Mar 12 23:05:21 2012 +0800 @@ -0,0 +1,177 @@ +using System; +using System.Xml; + +namespace MetroWpf +{ + /// <summary> + /// Extension methods for the XmlNode / XmlDocument classes and its sub classes + /// </summary> + public static class XmlNodeExtensions + { + #region · Extensions · + + /// <summary> + /// Appends a child to a XML node + /// </summary> + /// <param name="parentNode">The parent node.</param> + /// <param name="name">The name of the child node.</param> + /// <returns>The newly cerated XML node</returns> + public static XmlNode CreateChildNode(this XmlNode parentNode, string name) + { + XmlDocument document = (parentNode is XmlDocument ? (XmlDocument)parentNode : parentNode.OwnerDocument); + XmlNode node = document.CreateElement(name); + + parentNode.AppendChild(node); + + return node; + } + + /// <summary> + /// Appends a child to a XML node + /// </summary> + /// <param name="parentNode">The parent node.</param> + /// <param name="name">The name of the child node.</param> + /// <param name="namespaceUri">The node namespace.</param> + /// <returns>The newly cerated XML node</returns> + public static XmlNode CreateChildNode(this XmlNode parentNode, string name, string namespaceUri) + { + XmlDocument document = (parentNode is XmlDocument ? (XmlDocument)parentNode : parentNode.OwnerDocument); + XmlNode node = document.CreateElement(name, namespaceUri); + + parentNode.AppendChild(node); + + return node; + } + + /// <summary> + /// Appends a CData section to a XML node + /// </summary> + /// <param name="parentNode">The parent node.</param> + /// <returns>The created CData Section</returns> + public static XmlCDataSection CreateCDataSection(this XmlNode parentNode) + { + return parentNode.CreateCDataSection(string.Empty); + } + + /// <summary> + /// Appends a CData section to a XML node and prefills the provided data + /// </summary> + /// <param name="parentNode">The parent node.</param> + /// <param name="data">The CData section value.</param> + /// <returns>The created CData Section</returns> + public static XmlCDataSection CreateCDataSection(this XmlNode parentNode, string data) + { + XmlDocument document = (parentNode is XmlDocument ? (XmlDocument)parentNode : parentNode.OwnerDocument); + XmlCDataSection node = document.CreateCDataSection(data); + + parentNode.AppendChild(node); + + return node; + } + + /// <summary> + /// Returns the value of a nested CData section. + /// </summary> + /// <param name="parentNode">The parent node.</param> + /// <returns>The CData section content</returns> + public static string GetCDataSection(this XmlNode parentNode) + { + foreach (var node in parentNode.ChildNodes) + { + if (node is XmlCDataSection) + { + return ((XmlCDataSection)node).Value; + } + } + + return null; + } + + /// <summary> + /// Gets an attribute value + /// </summary> + /// <param name="node">The node.</param> + /// <param name="attributeName">The Name of the attribute.</param> + /// <returns>The attribute value</returns> + public static string GetAttribute(this XmlNode node, string attributeName) + { + return GetAttribute(node, attributeName, null); + } + + /// <summary> + /// Gets an attribute value + /// </summary> + /// <param name="node">The node.</param> + /// <param name="attributeName">The Name of the attribute.</param> + /// <param name="defaultValue">The default value to be returned if no matching attribute exists.</param> + /// <returns>The attribute value</returns> + public static string GetAttribute(this XmlNode node, string attributeName, string defaultValue) + { + XmlAttribute attribute = node.Attributes[attributeName]; + + return (attribute != null ? attribute.InnerText : defaultValue); + } + + /// <summary> + /// Gets an attribute value converted to the specified data type + /// </summary> + /// <typeparam name="T">The desired return data type</typeparam> + /// <param name="node">The node.</param> + /// <param name="attributeName">The Name of the attribute.</param> + /// <returns>The attribute value</returns> + public static T GetAttribute<T>(this XmlNode node, string attributeName) + { + return GetAttribute<T>(node, attributeName, default(T)); + } + + /// <summary> + /// Gets an attribute value converted to the specified data type + /// </summary> + /// <typeparam name="T">The desired return data type</typeparam> + /// <param name="node">The node.</param> + /// <param name="attributeName">The Name of the attribute.</param> + /// <param name="defaultValue">The default value to be returned if no matching attribute exists.</param> + /// <returns>The attribute value</returns> + public static T GetAttribute<T>(this XmlNode node, string attributeName, T defaultValue) + { + var value = GetAttribute(node, attributeName); + + return (value.IsNotEmpty() ? value.ConvertTo<T>(defaultValue) : defaultValue); + } + + /// <summary> + /// Creates or updates an attribute with the passed value. + /// </summary> + /// <param name="node">The node.</param> + /// <param name="name">The name.</param> + /// <param name="value">The value.</param> + public static void SetAttribute(this XmlNode node, string name, object value) + { + SetAttribute(node, name, value != null ? value.ToString() : null); + } + + /// <summary> + /// Creates or updates an attribute with the passed value. + /// </summary> + /// <param name="node">The node.</param> + /// <param name="name">The name.</param> + /// <param name="value">The value.</param> + public static void SetAttribute(this XmlNode node, string name, string value) + { + if (node != null) + { + var attribute = node.Attributes[name, node.NamespaceURI]; + + if (attribute == null) + { + attribute = node.OwnerDocument.CreateAttribute(name, node.OwnerDocument.NamespaceURI); + node.Attributes.Append(attribute); + } + + attribute.InnerText = value; + } + } + + #endregion + } +} \ No newline at end of file