public static IEnumerable <XName> ReadChildElements(this XmlReader reader) { if (reader.IsEmptyElement) { reader.Read(); yield break; } var depth = reader.Depth; reader.Read(); // move to first child node while (reader.MoveToNextElement(depth)) { var name = reader.CurrentXName(); yield return(name); } reader.ReadEndElement(); }