-1

我一直在寻找比我已经在做的更好的解决方案。我需要构造一个 xml 以发送到 SOAP 服务,但我需要动态生成 XML。问题或可能不是问题,是我发现这真的很长,我认为必须有更好的方法来实现这一点。我正在使用 python 2.7.5,这是我的 XML(有点,它实际上更大):

SINGLE_PAYMENT = '''...
<v1:Shipping>
            <v1:Type>%s</v1:Type>
            <v1:Address1>%s</v1:Address1>
            <v1:Address2>%s</v1:Address2>
            <v1:City>%s</v1:City> 
            <v1:Country>%s</v1:Country>
            <v1:Items>%s</v1:Items>
            <v1:State>%s</v1:State>
            <v1:Carrier>%s</v1:Carrier>
            <v1:Weight>%s</v1:Weight>
            <v1:Total>%s</v1:Total>
 </v1:Shipping>
 ....'''

然后我做

SoapMessage = SINGLE_PAYMENT%...and replace here with variables passed to this function

有没有更好的方法呢?谢谢!

4

1 回答 1

0

您可以使用适当的XML 库,或者您可以编写一个使用模板生成单个“运输”元素的方法,例如:

def generate_tag(name, values, version='1'):
    return '\n'.join([
        '<v{0}:{1}>'.format(version, name),
        '\n'.join(
            '\t<v{2}:{0}>{1}</v{2}:{0}>'.format(k, v, version) for k, v in values.iteritems()
        ),
        '</v{0}:{1}>'.format(version, name)
    ])

# Output:
>>> print generate_tag('Shipping', {"Total": "100", "Type": "A"})
<v1:Shipping>
    <v1:Total>100</v1:Total>
    <v1:Type>A</v1:Type>
</v1:Shipping>

但是,正如您所看到的,这很快就会变得混乱。

不过,使用库(例如ElementTreeMiniDom)对您更有利,因为它们会处理任何需要的转义,并在您以后需要进行更改时提供更好的界面。

于 2013-09-25T02:31:08.873 回答