1

我正在尝试根据使用我的模块的某些代码请求的字符串类型从我的模块生成特定的 xml 字符串。这些 xml 字符串中的每一个都包含一些动态生成的数据。例如,许多这些 xml 字符串都有一个使用另一个函数生成的 cookie 字段。

我从一个 python 字典开始,它使用预先填充的动态字段(即 cookie)初始化所有 xml 字符串(即,不完全是动态的)。然后我调用字典来获取相关的 xml 字符串。

这种方法的问题是 cookie 每小时过期,因此模块在一小时后返回的字符串具有这些过期值。理想情况下,我希望拥有某种形式的生成器函数(不确定在这种情况下是否可能),它在根据请求的 msg_type 请求它们时返回正确格式的字符串(如下例所示)。保存在这个字典中的每个 xml 字符串都是唯一的格式,所以我不能完全拥有某种通用的模板 xml 生成器。

例如,我定义的 dict 与此处的 get_msg 字典类似:

    get_msg["msg_value_1"] = """<ABC cookie=""" + getCookie() + """ > 
                                     <XYZ """ + foo_name +""">
                                     </XYZ>
                              </ABC>"""

    get_msg["msg_value_2"] = """<ABC cookie=""" + getCookie() + """ > 
                                     <some text """ + bar_name + """>
                                     </XYZ>
                              </ABC>"""

对于每个新的 msg 请求都会调用 getCookie() 来动态生成这些 xml 字符串,这将是一个好方法。任何输入将不胜感激。

4

1 回答 1

2

在 Python 中,函数是一等对象。这意味着您可以将一个函数作为参数传递给另一个函数。

def get_msg(function_to_call_to_get_injection_bit, tag_name_function,
            cookie_function):

    tagname = tag_name_function()
    injection = function_to_call_to_get_injection_bit()
    cookie = cookie_function()

    return '<ABC cookie="%s">' % (cookie) +
               '<%s %s></%s></ABC>' % (tagname, injection, tagname)

def get_injection():
    return foo_name

def get_tag_name_1():
    return "XYZ"

def get_tag_name_2():
    return "SomeText"

get_msg(get_injection, get_tag_name_1, getCookie)
get_msg(get_injection, get_tag_name_2, getCookie)

您只需在get_msg每次需要消息时调用,并将生成与 cookie 无关的消息部分的函数传递给它。

从您的问题来看,尚不完全清楚问题是什么。但这并不是真正的“生成器函数”:我认为您不想返回一个函数(这可能的),您想返回 XML 字符串并自定义它的构建方式。

正如 BenDundee 上面评论的那样,使用 XML 库来构建 XML 可能会更好,而不是手动构建字符串。Python 内置了几个选项,并且在外部提供了更多选项(例如美妙的lxml库)。

于 2013-01-28T22:43:27.093 回答