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 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>''')
      >>> [(tag.tag_id, tag.values) for tag in tag_objects]
      [('1', ['a', 'b']), ('2', ['c', 'd'])]
      """
  
output:     from xml.etree import ElementTree as ET
  
      class Tag:
          def __init__(self, tag_id, values):
              self.tag_id = tag_id
              self.values = values
  
      def parse_xml(text: str) -> List[Tag]:
          root = ET.fromstring(text)
          tags = []
  
          for child in root.findall('.//root/*'):
              tag_id = child.get('id')
              values = [subchild.get('value') for subchild in child.findall('./*')]
              tags.append(Tag(tag_id, values))
  
          return tags