我正在使用spyne Array来转换JSON列表,我需要添加" id"属于"推荐"最终XML中的父节点。
这是我期待的最终XML:
<viewOutboundResponse user="rayners">
<referral id="123">
<status>SUBMITTED</status>
<from>
<outlet id="12345">ABC</outlet>
</from>
<to>
<outlet id="6789">XYZ</outlet>
</to>
<date>2015-01-14</date>
<client>Bloggs</client>
<daysToExpiry>3</daysToExpiry>
</referral>
<referral id="456">
<status>REJECTED</status>
<from>
<outlet id="101112">DEF</outlet>
</from>
<to>
<outlet id="131415">S2X Demo</outlet>
</to>
<date>2004-01-15</date>
<client>Gobbs</client>
<daysToExpiry>7</daysToExpiry>
</referral>
</viewOutboundResponse>
这是我的代码:
class ReferralSummaryType(ComplexModel):
__type_name__ = 'referral'
type_info = {'id': XmlAttribute(Integer),
'status': Unicode,
'from': ReferralFromType,
'to': ReferralToType,
'date': Date,
'client': Unicode,
'daysToExpiry': Integer}
class OutboundResponseType(ComplexModel):
__mixin__ = True
referral = Array(ReferralSummaryType)
但我得到的输出是:
<viewOutboundResponse user="rayners">
<referral>
<referral id="123">
<status>SUBMITTED</status>
<from>
<outlet id="12345">ABC</outlet>
</from>
<to>
<outlet id="6789">XYZ</outlet>
</to>
<date>2015-01-14</date>
<client>Bloggs</client>
<daysToExpiry>3</daysToExpiry>
</referral>
<referral id="456">
<status>REJECTED</status>
<from>
<outlet id="101112">DEF</outlet>
</from>
<to>
<outlet id="131415">S2X Demo</outlet>
</to>
<date>2004-01-15</date>
<client>Gobbs</client>
<daysToExpiry>7</daysToExpiry>
</referral>
</referral>
</viewOutboundResponse>
答案 0 :(得分:0)
所以你的问题是
我需要添加&#34; id&#34;属于&#34;推荐&#34;中的父节点 最终的XML。
您想要的输出有一系列没有包装引用节点的引用节点,您看到的结果是一系列嵌入式引用节点(每个节点都有id属性)但在包装节点上没有ID。
那里有一点冲突。如果你需要在包装引用节点中有一个ID,那么我认为你可能需要更改你的响应并为包装器类型添加一个类:
class ReferralWrapperType(ComplexModel):
__type_name__ = 'referral'
id = XMLAttribute(Integer)
referral = Array(ReferralSummaryType)
class OutboundResponseType(ComplexModel):
__mixin__ = True
referral = ReferralWrapperType
然而,如果您需要的是您所说的最终XML所显示的内容,那么您可以从Spyne array documentation开始相信我可能会尝试:
class OutboundResponseType(ComplexModel):
__mixin__ = True
referral = ReferralSummaryType.customize(max_occurs="unbounded")
警告 - 我对Spyne非常非常新。 编辑使用max_occurs =&#34;无界&#34;而不是max_occurs = float(&#39; inf&#39;)每this spyne bug。
答案 1 :(得分:0)
根据Spyne文档(http://spyne.io/docs/2.10/manual/03_types.html#arrays),使用
referral = ReferralSummaryType.customize(max_occurs="unbounded")
解决了我的问题。
谢谢!