XElement extensions

    public static class XElementExtension
    {
        /// <summary>
        /// Filters XElement by tag name and value.
        /// </summary>
        /// <param name="elements">The elements.</param>
        /// <param name="tag">Name of the tag.</param>
        /// <param name="value">The tag value.</param>
        /// <returns></returns>
        public static IEnumerable<XElement> FilterByTag(this IEnumerable<XElement> elements, string tag, string value)
        {
            IEnumerable<XElement> myElements 
                = elements.Where(element =>{
                                                if (element.Name.LocalName == tag)
                                                {
                                                    if (element.HasValue(value) == truereturn true;
                                                } 
                                                return false;
                                            });

            return myElements;
        }
        /// <summary>
        /// Filters XElements by tag name.
        /// </summary>
        /// <param name="elements">The elements.</param>
        /// <param name="name">Name of the tag.</param>
        /// <returns></returns>
        public static IEnumerable<XElement> FilterByTag(this IEnumerable<XElement> elements, string name)
        {
            IEnumerable<XElement> myElements 
                = elements.Where(element =>{
                                                if (element.Name.LocalName == name) return true;
                                                return false;
                                            });

            return myElements;
        }
        /// <summary>
        /// Filters XElements by class.
        /// </summary>
        /// <param name="elements">The elements.</param>
        /// <param name="attributy">Name of the class attributy.</param>
        /// <returns></returns>
        public static IEnumerable<XElement> FilterByClass(this IEnumerable<XElement> elements, string attributy)
        {
            IEnumerable<XElement> myElements 
                = elements.Where(element =>{
                                                if (element.HasClass(attributy) == truereturn true;
                                                return false;
                                            });
            return myElements;
        }
        /// <summary>
        /// Converts XElements to string.
        /// </summary>
        /// <param name="elements">The elements.</param>
        /// <returns></returns>
        public static string ToString(this IEnumerable<XElement> elements)
        {
            StringBuilder myStringBuilder=new StringBuilder();
            foreach(var myElement in elements)
            {
                myStringBuilder.AppendLine(myElement.ToString());
            }
            return myStringBuilder.ToString();
        }
        /// <summary>
        /// Returns all descendants with a perticular tag name.
        /// </summary>
        /// <param name="element">The element.</param>
        /// <param name="tag">Name of the tag.</param>
        /// <returns></returns>
        public static IEnumerable<XElement> DescendantsByTag(this XElement element, string tag)
        {
            return element.Descendants().FilterByTag(tag);
        }
        /// <summary>
        /// Returns all descendants with a perticular tag name and value.
        /// </summary>
        /// <param name="element">The element.</param>
        /// <param name="tag">Name of the tag.</param>
        /// <param name="value">The tag value.</param>
        /// <returns></returns>
        public static IEnumerable<XElement> DescendantsByTag(this XElement element, string tag, string value)
        {
            return element.Descendants().FilterByTag(tag, value);
        }
        /// <summary>
        /// returns FirstOrDefault as string. Additionally checks for null.
        /// </summary>
        /// <param name="elements">The elements.</param>
        /// <param name="defaultValue">The default value.</param>
        /// <returns></returns>
        public static string FirstOrDefaultAsString(this IEnumerable<XElement> elements, string defaultValue)
        {
            if (elements.FirstOrDefault() != nullreturn elements.FirstOrDefault().Value.ToString();
            return defaultValue;
        }
    }

Leave a comment