"""Copyright (c) 2023, Aydin Abdi.
This module is responsible for loading XML files.
"""
from typing import Optional, cast
from xml.etree import ElementTree as ET
[docs]
class XMLLoader:
"""Responsible for loading XML file."""
def __init__(self, xml_path: str) -> None:
"""Responsible for loading XML files into XMLParser.
Args:
xml_path: Path to the XML file.
"""
self.xml_path = xml_path
self._tree: Optional[ET.ElementTree[ET.Element]] = None
self._root: Optional[ET.Element] = None
@property
def tree(self) -> ET.ElementTree: # pragma: no cover
"""Returns the XML tree.
Returns:
XML tree.
"""
if not self._tree:
self._tree = ET.parse(self.xml_path)
return cast(ET.ElementTree, self._tree)
@property
def root(self) -> ET.Element: # pragma: no cover
"""Returns the XML root.
Returns:
XML root.
"""
if not self._root:
self._root = self.tree.getroot()
return cast(ET.Element, self._root)