Добавление корневого атрибута XML с дефисами в python XMLBuilder - PullRequest
1 голос
/ 14 августа 2011

Я интегрируюсь с API Google Checkout, и все их атрибуты включают дефисы в значениях своих атрибутов. Поэтому, чтобы создать запрос на списание заказа, мне нужно отправить сообщение в формате XML, которое выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<charge-and-ship-order xmlns="http://checkout.google.com/schema/2" google-order-number="6014423719">
    <amount currency="USD">335.55</amount>
</charge-and-ship-order>

У меня проблемы с созданием этого XML с атрибутом "номер заказа Google". Следующий код работает, если я хочу создать пустой узел:

>>> xml=XMLBuilder()
>>> xml << ('charge-and-ship-order, {'xmlns':'xxx','google-order-number':'3433'})
>>> str(xml)
>>> <charge-and-ship-order google-order-number="3433" xmlns="xxx" /> 

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

>>> xml=XMLBuilder()
>>> with xml('charge-and-ship-order', xmlns='xxx', google-order-number='3433'}):
>>>     with xml('amount', currency="USD"):
>>>         xml << '4.54'

Я получаю сообщение об ошибке:

SyntaxError: keyword can't be an expression

Я также пробовал:

>>> xml=XMLBuilder()
>>> with xml('charge-and-ship-order', {'xmlns':'xxx', 'google-order-number':'3433'}):
>>>     with xml << 'test'

и я получаю трассировку в библиотеке XMLBuilder, говорящую

    File "/xmlbuilder/xmlbuilder/__init__.py", line 102, in __call__
    x(*dt,**mp)
    File "/xmlbuilder/xmlbuilder/__init__.py", line 36, in __call__
    text = "".join(dt)
    TypeError: sequence item 0: expected string, dict found

Есть идеи, как использовать такой атрибут? Я использую библиотеку XMLBuilder, расположенную по адресу http://pypi.python.org/pypi/xmlbuilder

1 Ответ

0 голосов
/ 14 августа 2011

Вы можете передать атрибуты в словаре так:

function_call(**{'weird-named-key': 'value'})
...