Другой вариант - перебирать атрибуты и возвращать значение атрибута с локальным именем, оканчивающимся на backgroundImage
.
Пример ...
from xml.etree import ElementTree as ET
XML = '''
<body xmlns:ttm="http://www.w3.org/ns/ttml#metadata"
xmlns:smpte="http://smpte-ra.org/schemas/2052-1/2013/smpte-tt">
<div region="imageRegion" xml:id="img_SUB6756004155_0"
ttm:role="caption" smpte:backgroundImage="#SUB6756004155_0"></div>
</body>'''
root = ET.fromstring(XML)
div = root.find("div")
val = next((v for k, v in div.attrib.items() if k.endswith('backgroundImage')), None)
if val:
print(f"Value: {val}")
Выходы ...
Value: #SUB6756004155_0
Это может быть хрупким, хотя. Возвращает только первый найденный атрибут.
Если это проблема, используйте вместо этого список:
val = [v for k, v in div.attrib.items() if k.endswith('backgroundImage')]
Было бы также неправильно возвращать атрибут, который заканчивается на "backgroundImage" (например, "invalid_backgroundImage").
Если это проблема, используйте вместо этого регулярное выражение:
val = next((v for k, v in div.attrib.items() if re.match(r".*}backgroundImage$", "}" + k)), None)
Если вам когда-нибудь удастся переключиться на lxml, тестирование локального имени можно выполнить в xpath ...
val = div.xpath("@*[local-name()='backgroundImage']")