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