Python elementTree получить атрибут, который заканчивается

Android не имеет такого представления. Но вы можете создать пользовательские компоненты на основе ваших потребностей. Для вашего конкретного случая этот должен быть точным. Для более сложного сценария вы можете ссылаться на на этот на github.

-1
задан Ortal Turgeman 20 January 2019 в 12:55
поделиться

2 ответа

Другой вариант - перебирать атрибуты и возвращать значение атрибута с локальным именем, оканчивающимся на 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 ... [1113 ]

val = div.xpath("@*[local-name()='backgroundImage']")
0
ответ дан Daniel Haley 20 January 2019 в 12:55
поделиться

Приведенный ниже фрагмент демонстрирует, как можно получить значение атрибута smpte:backgroundImage из правильно сформированного документа XML (входной документ в вопросе не является правильно сформированным).

smpte: означает, что атрибут связан с пространством имен, которое является http://smpte-ra.org/schemas/2052-1/2013/smpte-tt, судя по скриншоту. Обратите внимание, что оба префикса ttm и smpte должны быть объявлены в документе XML (xmlns:ttm="..." и xmlns:smpte="...").

В вызове get() имя атрибута должно быть дано в «Запись Кларка» : {http://smpte-ra.org/schemas/2052-1/2013/smpte-tt}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")
print(div.get("{http://smpte-ra.org/schemas/2052-1/2013/smpte-tt}backgroundImage"))

Выход:

#SUB6756004155_0
0
ответ дан mzjn 20 January 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: