def _read_marcxml(xml):
    """
    Read MARC XML or OAI file, convert, add namespace and return XML in
    required format with all necessities.

    Args:
        xml (str): Filename or XML string. Don't use ``\\n`` in case of
                   filename.

    Returns:
        obj: Required XML parsed with ``lxml.etree``.
    """
    # read file, if `xml` is valid file path
    marc_xml = _read_content_or_path(xml)


    # process input file - convert it from possible OAI to MARC XML and add
    # required XML namespaces
    marc_xml = _oai_to_xml(marc_xml)
    marc_xml = _add_namespace(marc_xml)

    file_obj = StringIO.StringIO(marc_xml)

    return ET.parse(file_obj)
Read MARC XML or OAI file, convert, add namespace and return XML in
    required format with all necessities.

    Args:
        xml (str): Filename or XML string. Don't use ``\\n`` in case of
                   filename.

    Returns:
        obj: Required XML parsed with ``lxml.etree``.