-1

私はすでにやっていることよりも良い解決策を探しています。SOAP サービスに送信する xml を作成する必要がありますが、動的に 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 ライブラリを使用するか、テンプレートを使用して単一の「shipping」要素を生成するメソッドを記述するだけです。次に例を示します。

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 に答える