code: def parse_div(soup, metadata, target):
      
      documents = []
      div_type = soup.get('type', None)
      div_title = list(soup.children)[0].string.strip()
      
      if div_type in target:
          div_authors = soup.find_all('author')
          document = {
              'type': div_type,
              'title': div_title,
              'paragraphs': parse_paragraphs(soup)
          }
          # add author, if it exists
          if len(div_authors) > 0:
              div_author = div_authors[0].text.strip()
              document['author'] = div_author
          # add collected metadata
          for k, v in metadata.items():
              document[k] = v
          documents.append(document)
      else:
          metadata[div_type] = div_title
  
          # recurse subdivs
          subdiv_name = get_subdiv(soup.name)
          subdivs = []
          if subdiv_name is not None:
              subdivs = soup.find_all(subdiv_name)
          if len(subdivs) > 0:
              for subdiv in subdivs:
                  documents.extend(parse_div(subdiv, deepcopy(metadata), target))
      return documents
docs: Parse a <div> tag from the file.
      
      The sections in XML files are given in <div1>, <div2> and <div3>
      tags. Each such tag has a type and name (plus possibly more extra attributes).
      
      If the div type is found in target variable, the div is parsed
      into structured paragraphs, sentences and words.
      
      Otherwise, the type and name are added as metadata to subdivs
      and stored in.
      
      Parameters
      ----------
      soup: bs4.BeautifulSoup
          The parsed XML data.
      metdata: dict
          The metadata for parent divs.
      target: list of str
          List of <div> types, that are considered documents in the XML files.