input: 
  from typing import List
  
  def parse_xml(text: str) -> List[Tag]:
      """ Parses an XML document and returns a list of Tag objects.
      Each Tag object contains the tag id and a list of values from its subchildren.
  
      >>> tag_objects = parse_xml('<xml><root><child1 id="1"><subchild1 value="a"></subchild1><subchild2 value="b"></subchild2></child1><child2 id="2"><subchild3 value="c"></subchild3><subchild4 value="d"></subchild4></child2></root></xml>')
      >>> for tag in tag_objects:
      ...     print(f'Tag ID: {tag.tag_id}, Values: {tag.values}')
      Tag ID: 1, Values: ['a', 'b']
      Tag ID: 2, Values: ['c', 'd']
      """
      
      import xml.etree.ElementTree as ET
      
      class Tag:
          def __init__(self, tag_id):
              self.tag_id = tag_id
              self.values = []
          
          def add_value(self, value):
              self.values.append(value)
      
      tag_objects = []
      
      root = ET.fromstring(text)
      for child in root:
          tag = Tag(child.attrib["id"])
          for subchild in child:
              tag.add_value(subchild.attrib["value"])
          tag_objects.append(tag)
      
      return tag_objects
  
output:     import xml.etree.ElementTree as ET
      
      class Tag:
          def __init__(self, tag_id):
              self.tag_id = tag_id
              self.values = []
          
          def add_value(self, value):
              self.values.append(value)
      
      tag_objects = []
      
      root = ET.fromstring(text)
      for child in root:
          tag = Tag(child.attrib["id"])
          for subchild in child:
              tag.add_value(subchild.attrib["value"])
          tag_objects.append(tag)
      
      return tag_objects