在Python XMLBuilder中添加带有连字符的XML根属性

1 投票
1 回答
618 浏览
提问于 2025-04-16 23:33

我正在和谷歌结账的API进行整合,他们的所有属性值中都包含连字符。所以为了创建一个请求来收费,我需要发送一个看起来像这样的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>

我在构建这个包含“google-order-number”属性的XML时遇到了麻烦。以下代码可以正常工作,如果我想创建一个空节点:

>>> 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

你可以像这样通过一个字典来传递属性:

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

撰写回答