0

我正在使用 spyne Array 来转换 JSON 列表,我需要将“id”属性添加到最终 XML 中的“referral”父节点。

这是我期待的最终 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>
4

2 回答 2

0

所以你的问题说

我需要将“id”属性添加到最终 XML 中的“referral”父节点。

您所需的输出有一系列没有包装推荐节点的推荐节点,您看到的结果是一系列嵌入式推荐节点(每个都有 id 属性),但包装节点上没有 ID。

所以那里有一点冲突。如果您需要在包装引用节点中有一个 ID,那么我认为您可能需要更改您的响应并为包装器类型添加一个类:

class ReferralWrapperType(ComplexModel):
    __type_name__ = 'referral'
    id = XMLAttribute(Integer)
    referral = Array(ReferralSummaryType)


class OutboundResponseType(ComplexModel):
    __mixin__ = True
     referral = ReferralWrapperType

而如果您需要的是您所说的是您所期望的最终 XML,那么从Spyne 数组文档中,我相信您也许可以尝试:

class OutboundResponseType(ComplexModel):
    __mixin__ = True
     referral = ReferralSummaryType.customize(max_occurs="unbounded")

警告 - 我对 Spyne 非常非常陌生。根据这个 spyne 错误,编辑为使用 max_occurs="unbounded" 而不是 max_occurs=float('inf') 。

于 2015-03-19T15:53:10.240 回答
0

根据 Spyne 文档(http://spyne.io/docs/2.10/manual/03_types.html#arrays),使用

referral = ReferralSummaryType.customize(max_occurs="unbounded")

解决了我的问题。

谢谢!

于 2015-08-04T02:59:02.933 回答