속성을 : PyXB 스키마를 감안할 때 생성 된 파이썬 클래스
<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
명령을 실행 한 후
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
큰 문제는 아닙니다. 그것 이외의 PyXB는 환상적입니다. 나는 주변의 일을 발견했다. 코멘트에 코드를 넣을 수 없으므로 원래 질문을 편집합니다. – opgeven
'name'은 ExpandedName (네임 스페이스 + 로컬 이름 또는 네임 스페이스가없는 로컬 이름)이고'value'는 속성의 유니 코드 값인 곳에'instance._setAttribute (name, value)'를 사용할 수 있어야합니다. : AttributeUse를 작성할 필요가 없습니다. 업스트림 github 저장소에서 귀하의 질문에서 영감을 얻은 문제 (https://github.com/pabigot/pyxb/commit/c31b68828969f14acd88504aeb61cd68407cf5e8)가 수정되었습니다. – pabigot
감사합니다. 확실히 명확합니다. 그리고 아직도이 도서관에서 일해 주셔서 감사합니다. – opgeven