Python 3,7 || Zeep 3.4.0
Поведение: Я работаю с API, в котором пустые теги XML используются для обозначения важной точки данных. WSDL определяет шесть возможных типов, и какой из шести конкретный элемент обозначается. Когда zeep анализирует XML, он обрабатывает <tag />
так же, как и отсутствующий тег, поэтому для данного ответа zeep перечисляет все шесть возможных типов как None
type.
ожидаемое поведение:
- , что синтаксический анализ XML будет каким-то образом указывать на разницу между существующим пустым тегом и тегом, который определен в WSDL, но отсутствует.
- , что создание XML обеспечивает некоторый механизм для включения пустого тега как части элемента.
Пример:
Когда необработанный XML из API выглядит следующим образом:
<ns1:placeholder>
<ns1:name>this is an instruction</ns1:name>
<ns1:optional>true</ns1:optional>
<ns1:instructions />
</ns1:placeholder>
Zeep интерпретирует этот ответ как:
'placeholder': [
{
'name': 'this is an instruction',
'optional': True,
'text': None,
'longText': None,
'instructions': None,
'checkbox': None,
'multipleChoice': None,
'additionalRecipients': None
}
]
и при преобразовании в xml с помощью zeep:
<ns1:placeholder>
<ns1:name>this is an instruction</ns1:name>
<ns1:optional>true</ns1:optional>
</ns1:placeholder>
Мне нужно, чтобы <ns1:instructions />
было прочитано как из ответа, так и в запрос.
Рассматриваемый WSDL выглядит следующим образом:
<complexType name="placeholderType">
<choice>
<sequence>
<element name="name" type="string"/>
<element name="optional" type="boolean"/>
<choice>
<element name="text" type="mir3:textInputPlaceholderType" />
<element name="longText" type="mir3:textInputPlaceholderType" />
<element name="instructions"><complexType/></element>
<element name="checkbox" type="mir3:checkboxPlaceholderType" />
<element name="multipleChoice" type="mir3:multipleChoicePlaceholderType" />
</choice>
</sequence>
<element name="additionalRecipients" type="mir3:additionalRecipientsType"/>
</choice>
</complexType>
перечисленных выше типов, некоторые из них не являются проблемами, поскольку, например, multipleChoicePlaceholderType
содержит обязательные элементы, поэтому тег никогда не будет пустым когда присутствует. Но некоторые из типов, ie textInputPlaceholderType
, имеют только дополнительные элементы, и поэтому могут присутствовать или не быть пустыми при их наличии. Неизбежная проблема - instructions
, которая всегда пуста, если присутствует.