~/src/www.mokhan.ca/xlgmokha [main]
cat xml-element-enumerable-take-2.md
xml-element-enumerable-take-2.md 3216 bytes | 2008-05-30 00:00
symlink: /opt/dotnet/xml-element-enumerable-take-2.md

XML Element Enumerable Take 2

A couple of days ago I posted something on an XmlEnumerable. An object that knows how to traverse an XML document in a linear form. After talking with a colleage, he suggested that I simplify the implementation with a little XPath action.

  public class XmlElementEnumerable : IEnumerable<IXmlElement> {
      private XmlElement rootElement;
      private IMapper<XmlElement, IXmlElement> mapper;

      public XmlElementEnumerable(XmlElement rootElement) {
          this.rootElement = rootElement;
          mapper = new XmlElementMapper();
      }

      public IEnumerator<IXmlElement> GetEnumerator() {
          foreach (var node in rootElement.SelectNodes("//*")) {
              yield return mapper.MapFrom(node.DownCastTo<XmlElement>());
          }
      }

      IEnumerator IEnumerable.GetEnumerator() {
          return GetEnumerator();
      }
  }

Diving a little deeper, I think using XPath expressions are probably a lot more efficient for traversing a document.