code: function(data) {
          if(typeof data == "string") { 
              data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
          }
          if(data && data.nodeType == 9) {
              data = data.documentElement;
          }
          var features = [];
          this.readNode(data, {features: features}, true);
          if(features.length == 0) {
              // look for gml:featureMember elements
              var elements = this.getElementsByTagNameNS(
                  data, this.namespaces.gml, "featureMember"
              );
              if(elements.length) {
                  for(var i=0, len=elements.length; i<len; ++i) {
                      this.readNode(elements[i], {features: features}, true);
                  }
              } else {
                  // look for gml:featureMembers elements (this is v3, but does no harm here)
                  var elements = this.getElementsByTagNameNS(
                      data, this.namespaces.gml, "featureMembers"
                  );
                  if(elements.length) {
                      // there can be only one
                      this.readNode(elements[0], {features: features}, true);
                  }
              }
          }
          return features;
      }
docs: Method: read
  
  Parameters:
  data - {DOMElement} A gml:featureMember element, a gml:featureMembers
  element, or an element containing either of the above at any level.
  
  Returns:
  {Array(<OpenLayers.Feature.Vector>)} An array of features.