2013-09-25 2 views
-1

Я искал подходящее решение для того, что я уже делаю. Мне нужно построить xml для отправки в SOAP-службу, но мне нужно генерировать XML динамически. Проблема или не может быть проблемой, так это то, что я нахожу это очень долго, и я думаю, что должен быть лучший способ добиться этого. Я использую 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> 

Но, как вы можете видеть, что получает грязно быстро ,

Использование библиотек (например, ElementTree или MiniDom) было бы более полезным для вас, поскольку они будут заботиться обо всех необходимых экранах и обеспечить лучший интерфейс, если вам нужно будет внести изменения позже.

Смежные вопросы