docs: def parse(cls, fptr, offset, length):
          """Parse XML box.
  
          Parameters
          ----------
          fptr : file
              Open file object.
          offset : int
              Start position of box in bytes.
          length : int
              Length of the box in bytes.
  
          Returns
          -------
          XMLBox
              Instance of the current XML box.
          """
          num_bytes = offset + length - fptr.tell()
          read_buffer = fptr.read(num_bytes)
  
          if sys.hexversion < 0x03000000 and codecs.BOM_UTF8 in read_buffer:
              # Python3 with utf-8 handles this just fine.  Actually so does
              # Python2 right here since we decode using utf-8.  The real
              # problem comes when __str__ is used on the XML box, and that
              # is where Python2 falls short because of the ascii codec.
              msg = ('A BOM (byte order marker) was detected and '
                     'removed from the XML contents in the box starting at byte '
                     'offset {offset:d}.')
              msg = msg.format(offset=offset)
              warnings.warn(msg, UserWarning)
              read_buffer = read_buffer.replace(codecs.BOM_UTF8, b'')
  
          try:
              text = read_buffer.decode('utf-8')
          except UnicodeDecodeError as err:
              # Possibly bad string of bytes to begin with.
              # Try to search for <?xml and go from there.
              decl_start = read_buffer.find(b'<?xml')
              if decl_start <= -1:
                  # Nope, that's not it.  All is lost.
                  msg = ('A problem was encountered while parsing an XML box:'
                         '\n\n\t"{error}"\n\nNo XML was retrieved.')
                  warnings.warn(msg.format(error=str(err)), UserWarning)
                  return XMLBox(xml=None, length=length, offset=offset)
  
              text = read_buffer[decl_start:].decode('utf-8')
  
              # Let the user know that the XML box was problematic.
              msg = ('A UnicodeDecodeError was encountered parsing an XML box '
                     'at byte position {offset:d} ({reason}), but the XML was '
                     'still recovered.')
              msg = msg.format(offset=offset, reason=err.reason)
              warnings.warn(msg, UserWarning)
  
          # Strip out any trailing nulls, as they can foul up XML parsing.
          text = text.rstrip(chr(0))
          bfptr = io.BytesIO(text.encode('utf-8'))
  
          try:
              xml = ET.parse(bfptr)
          except ET.ParseError as err:
              msg = ('A problem was encountered while parsing an XML box:'
                     '\n\n\t"{reason}"\n\nNo XML was retrieved.')
              msg = msg.format(reason=str(err))
              warnings.warn(msg, UserWarning)
              xml = None
  
          return cls(xml=xml, length=length, offset=offset)