code: def from_xml(cls, child, result=None):
          
          if child.tag.lower() != cls._type_value:
              raise exception.ElementDataWrongType(
                  type_expected=cls._type_value,
                  type_provided=child.tag.lower()
              )
  
          tags = {}
  
          for sub_child in child:
              if sub_child.tag.lower() == "tag":
                  name = sub_child.attrib.get("k")
                  if name is None:
                      raise ValueError("Tag without name/key.")
                  value = sub_child.attrib.get("v")
                  tags[name] = value
  
          node_id = child.attrib.get("id")
          if node_id is not None:
              node_id = int(node_id)
          lat = child.attrib.get("lat")
          if lat is not None:
              lat = Decimal(lat)
          lon = child.attrib.get("lon")
          if lon is not None:
              lon = Decimal(lon)
  
          attributes = {}
          ignore = ["id", "lat", "lon"]
          for n, v in child.attrib.items():
              if n in ignore:
                  continue
              attributes[n] = v
  
          return cls(node_id=node_id, lat=lat, lon=lon, tags=tags, attributes=attributes, result=result)
docs: Create new way element from XML data
  
          :param child: XML node to be parsed
          :type child: xml.etree.ElementTree.Element
          :param result: The result this node belongs to
          :type result: overpy.Result
          :return: New Way oject
          :rtype: overpy.Node
          :raises overpy.exception.ElementDataWrongType: If name of the xml child node doesn't match
          :raises ValueError: If a tag doesn't have a name