input: Write a function to parse an XML document and return a list of tag objects. The function should iterate through each child element of the root and create a Tag object for each child. Each Tag object should contain the child's 'id' attribute and a list of values from its subchildren elements. If the XML document is empty, the function should return an empty list.
  
  assert 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>")==[<__main__.Tag object at 0x7f8b1c0b8e50>, <__main__.Tag object at 0x7f8b1c0b8f10>], "Test case 1 failed"
  assert parse_xml("<xml></xml>")==[], "Test case 2 failed"
output: def parse_xml(xml_string):
      from xml.etree import ElementTree as ET
      root = ET.fromstring(xml_string)
      tags = []
      for child in root:
          tag_id = child.attrib['id']
          values = [subchild.attrib['value'] for subchild in child]
          tags.append(Tag(tag_id, values))
      return tags