input: Write a function that parses an XML document and returns a list of tag objects. The function should take a string of XML as input and return a list of Tag objects. Each Tag object should have an `id` attribute and a list of values associated with its subchildren. If the input XML string 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>""") == [Tag(id="1", values=["a", "b"]), Tag(id="2", values=["c", "d"])]
  
  assert parse_xml("""
  <xml>
    <root>
      <child1 id="1">
        <subchild1 value="a"></subchild1>
      </child1>
    </root>
  </xml>""") == [Tag(id="1", values=["a"])]
  
  assert parse_xml("") == []
  
output: def parse_xml(xml_str):
      if not xml_str:
          return []
      
      from xml.etree import ElementTree as ET
      
      root = ET.fromstring(xml_str)
      tags = []
      
      for child in root.findall('.//child1'):
          tag_id = child.get('id')
          values = [subchild.get('value') for subchild in child]
          tags.append(Tag(id=tag_id, values=values))
      
      return tags