【问题标题】:How to add attributes all the to XMLElements in Spyne Array如何将所有属性添加到 Spyne 数组中的 XMLElements
【发布时间】:2015-01-16 01:44:10
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: arrays xml soap spyne


    【解决方案1】:

    所以你的问题说

    我需要将“id”属性添加到“referral”父节点中 最终的 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 非常非常陌生。 根据this spyne bug 编辑为使用 max_occurs="unbounded" 而不是 max_occurs=float('inf')。

    【讨论】:

      【解决方案2】:

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

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

      解决了我的问题。

      谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        相关资源
        最近更新 更多