2013-09-25 14 views
-1

我一直在尋找更好的解決方案,我已經在做什麼。我需要構建一個xml以發送到SOAP服務,但我需要生成XML dinamically。這個問題或者可能不是問題,我覺得這個時間很長,我認爲必須有更好的方法來解決這個問題。我使用python 2.7.5,這是我的XML(一種,它實際上是大):在xml中插入值的更好方法python 2.7

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 

是否有這樣做.Thanks的沒有更好的辦法? !

回答

0

你可以使用一個適當的XML library,或者你可以只寫生成使用模板的一個單一的「運費」元素,例如一個方法:

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)會比較你的利益,但是,他們會照顧任何需要的逃避,並提供更好的界面應該以後需要做出改變。