input: from typing import List
  
  def parse_xml(xml_string: str) -> List[Tag]:
      """ Parse an XML document and return a list of Tag objects.
      >>> xml_input = '''<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.tag_id for tag in parse_xml(xml_input)]
      ['1', '2']
      >>> [tag.values for tag in parse_xml(xml_input)]
      [['a', 'b'], ['c', 'd']]
      """
  
  class Tag:
      def __init__(self, tag_id: str):
          self.tag_id = tag_id
          self.values = []
      
      def add_value(self, value: str):
          self.values.append(value)
output:     from xml.etree import ElementTree as ET
  
      root = ET.fromstring(xml_string)
      tags = []
  
      for child in root.findall('.//child1'):
          tag_id = child.get('id')
          tag = Tag(tag_id)
          for subchild in child:
              value = subchild.get('value')
              tag.add_value(value)
          tags.append(tag)
  
      for child in root.findall('.//child2'):
          tag_id = child.get('id')
          tag = Tag(tag_id)
          for subchild in child:
              value = subchild.get('value')
              tag.add_value(value)
          tags.append(tag)
  
      return tags