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) == true) return 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) == true) return 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() != null) return elements.FirstOrDefault().Value.ToString();
return defaultValue;
}
}