, :
public static IEnumerable<XElement> FindElements(XElement d, string test)
{
foreach (XElement e in d.Descendants()
.Where(p => p.Attribute("text").Value == test))
{
yield return e;
if (e.Parent != null)
{
yield return e.Parent;
}
}
}
, Linq, :
List<XElement> elms = FindElement(d, "Visual Arts").ToList();
foreach (XElement elm in FindElements(d, "Visual Arts"))
{
...
}
Edit:
, , , , . , , , , XElement , , - .
, - . , :
XElement result = doc.Descendants()
.Where(x => x.Attribute("text").Value == test)
.Select(
x => x.Parent != null && x.Parent.Attribute("text") != null
? new XElement(
x.Parent.Name,
new XAttribute("text", x.Parent.Attribute("text").Value),
new XElement(
x.Name,
new XAttribute("text", x.Attribute("text").Value)))
: new XElement(
x.Name,
new XAttribute("text", x.Attribute("text").Value)))
.FirstOrDefault();