code: def from_xml(cls, child, result=None):
          
          if child.attrib.get("type") != cls._type_value:
              raise exception.ElementDataWrongType(
                  type_expected=cls._type_value,
                  type_provided=child.tag.lower()
              )
  
          ref = child.attrib.get("ref")
          if ref is not None:
              ref = int(ref)
          role = child.attrib.get("role")
  
          attributes = {}
          ignore = ["geometry", "ref", "role", "type"]
          for n, v in child.attrib.items():
              if n in ignore:
                  continue
              attributes[n] = v
  
          geometry = None
          for sub_child in child:
              if sub_child.tag.lower() == "nd":
                  if geometry is None:
                      geometry = []
                  geometry.append(
                      RelationWayGeometryValue(
                          lat=Decimal(sub_child.attrib["lat"]),
                          lon=Decimal(sub_child.attrib["lon"])
                      )
                  )
  
          return cls(
              attributes=attributes,
              geometry=geometry,
              ref=ref,
              role=role,
              result=result
          )
docs: Create new RelationMember from XML data
  
          :param child: XML node to be parsed
          :type child: xml.etree.ElementTree.Element
          :param result: The result this element belongs to
          :type result: overpy.Result
          :return: New relation member oject
          :rtype: overpy.RelationMember
          :raises overpy.exception.ElementDataWrongType: If name of the xml child node doesn't match