def load(obj): """ Parses a specified object using ElementTree. :param obj: a file-like or string-like object. :return: True if valid, else False. >>> load(None) Traceback (most recent call last): ValueError >>> load('') # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): XMLSyntaxError: None # Note: the exception will be different without lxml: ParseError: no element found: line 1, column 0 >>> load('<') # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): XMLSyntaxError: StartTag: invalid element name, line 1, column 2 # Note: the exception will be different without lxml: ParseError: unclosed token: line 1, column 0 >>> load('<abc />').tag 'abc' >>> load('<constants><constant id="pi" value="3.14" /><constant id="zero">0</constant></constants>').tag 'constants' """ if obj is None: raise ValueError if reflection_utils.is_file_like(obj): # read the contents of obj obj = obj.read() return ET.fromstring(obj)
def contains_valid_xml(obj): """ Indicates whether a specified value contains valid and well-formed XML. :param obj: a file-like or string-like object. :return: True if valid, else False. >>> contains_valid_xml(None) False >>> contains_valid_xml('') False >>> contains_valid_xml('<') False >>> contains_valid_xml('<xml />') True >>> contains_valid_xml('<constants><constant id="pi" value="3.14" /><constant id="zero">0</constant></constants>') True """ if obj is None: return False try: if reflection_utils.is_file_like(obj): # read the contents of obj obj = obj.read() ET.fromstring(obj) except ET.ParseError: return False return True