2014-06-05 1 views
0

속성을 : 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 명령을 실행 한 후

, 어떻게 생성 된 바인딩을 사용하여 임의의 속성 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

type은 확장 된 이름에서 속성 값을 나타내는 유니 코드 문자열로의 매핑 인 wildcardAttributeMap() 메서드를가집니다. this ticket 당 현재이지도를 조작 할 수있는 공개 API는 없지만 수동으로 수행 할 수는 있습니다.

귀하의 질문을 토대로 난 this ticket을 추가했습니다. 맵에 와일드 카드 속성을 넣더라도 생성 된 XML에는 나타나지 않습니다.

죄송합니다. PyXB 버그 수정을 한 번 더 할 차례 인 것 같습니다.

+0

큰 문제는 아닙니다. 그것 이외의 PyXB는 환상적입니다. 나는 주변의 일을 발견했다. 코멘트에 코드를 넣을 수 없으므로 원래 질문을 편집합니다. – opgeven

+0

'name'은 ExpandedName (네임 스페이스 + 로컬 이름 또는 네임 스페이스가없는 로컬 이름)이고'value'는 속성의 유니 코드 값인 곳에'instance._setAttribute (name, value)'를 사용할 수 있어야합니다. : AttributeUse를 작성할 필요가 없습니다. 업스트림 github 저장소에서 귀하의 질문에서 영감을 얻은 문제 (https://github.com/pabigot/pyxb/commit/c31b68828969f14acd88504aeb61cd68407cf5e8)가 수정되었습니다. – pabigot

+0

감사합니다. 확실히 명확합니다. 그리고 아직도이 도서관에서 일해 주셔서 감사합니다. – opgeven