PyXB добавляет атрибуты anyAttribute к сгенерированному классу Python

Учитывая схему:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
    <xs:anyAttribute/>
  </xs:complexType>
</xs:element>

и после запуска pyxb -u <filename> -m person команда, как создать XML с произвольными атрибутами, используя сгенерированные привязки.

import person

p = person()
p.firstname = 'bob'
p.lastname  = 'bobbington'

#I want behavior like this
p.middlename = 'bobby'

#I would settle for behavior like this:
p.add_attribute( 'middlename', 'bobby' )

#Heck*, I'd even settle for:
temp_attr = pyxb.AttributeUse( name, value, blah, blah, blay )
p._AttributeMap.update( temp_attr.name(), temp_attr )

Но независимо от того, что я пытаюсь, я не могу получить временные атрибуты для отображения при вызове p.toxml()

Это не поддерживается? или я что то упустил?

Изменить: ненормативная лексика удалена.

Редактировать: сделал обходной (синтаксис и имена переменных далеко, но, надеюсь, это поможет другим понять это)

class PersonType():
    '''
    regular generated PersonType stuff here
    '''
    def add_attribute(self, name, value):
        t = pyxb.blahblahblah._AttributeUse(
            pyxb.blahblahblah._ExtendedName( None, attr_name),
            attr_name,
            pyxb.blahblah.StringDataType)
        t.setValue(self, value)  # or maybe _setValue
        self._AttributeMap[t.name()] = t

1 ответ

Решение

Если сложный тип поддерживает подстановочные атрибуты, экземпляры этого типа имеют метод wildcardAttributeMap(), который представляет собой карту от расширенных имен до строк Юникода, представляющих значения атрибутов. В соответствии с этим тикетом в настоящее время нет общедоступного API для манипулирования этой картой, хотя вы, вероятно, можете сделать это вручную.

Основываясь на рассмотрении вашего вопроса, я добавил этот тикет, который подтверждает, что даже если вы добавите в карту подстановочные атрибуты, они не будут отображаться в сгенерированном XML.

Извини за это. Похоже, пришло время сделать еще один раунд исправлений ошибок PyXB.

Другие вопросы по тегам