Это не нормальные атрибуты; это декларации пространства имен .
Это объявление: xmlns:cbnp-message="some_value"
связывает пространство имен uri some_value
с префиксом cbnp-message
.
Это объявление: xmlns="some_value2"
является пространством имен по умолчанию (поскольку uri не привязан к префиксу).
Что вы можете сделать в lxml - это использовать «nsmap» для отображения префиксов в uris. Для пространств имен по умолчанию префикс должен быть None
.
Чтобы избежать исключения «Недопустимое имя тега», вам также потребуется использовать QName()
для построения квалифицированного имени (которое представляет собой пространство имен uri и локальное имя в нотации Кларка (пример: [ 118])).
См. Здесь для получения дополнительной информации о пространствах имен в lxml.
См. Здесь (или ссылку на страницу Джеймса Кларка выше) для получения дополнительной информации о пространствах имен в целом.
Пример ...
from lxml import etree
nsmap = {None: "some_value2", "cbnp-message": "some_value"}
message = etree.Element(etree.QName(nsmap.get("cbnp-message"), "cbnp-message"), nsmap=nsmap)
etree.dump(message)
Вывод ...
См. Availability.h
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_2_0
и т.д.
Если это имеет значение достойное обходное решение, если такой макрос не существует, должно создать 2 цели сборки, и в одном из них добавляют установку сборки GCC_PREPROCESSOR_DEFINITIONS
со значением как IPHONE_OS_3
. Затем в Вашем коде можно сделать:
#ifdef IPHONE_OS_3
[foo thisMethodIsUnderNDA];
#else
[foo oldSchoolMethod];
#endif
Существуют макросы препроцессора, которые определяются для каждой версии ОС. Например, если __IPHONE_OS_3_0
определяется, затем Вы создаете против 3,0 SDK (или возможно позже, я не уверен).