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 an id and a list of values associated with its sub-elements.
      >>> 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>''')
      [Tag(1, ["a", "b"]), Tag(2, ["c", "d"])]
      """
      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
  
  class Tag:
      def __init__(self, tag_id):
          self.tag_id = tag_id
          self.values = []
      
      def add_value(self, value):
          self.values.append(value)
      
      def get_values(self):
          return self.values
      
      def __repr__(self):
          return f"Tag({self.tag_id}, {self.values})"
  
output:     import xml.etree.ElementTree as ET