1

モジュールを使用するコードによって要求された文字列のタイプに基づいて、モジュールから特定の xml 文字列を生成しようとしています。これらの各 xml 文字列には、動的に生成されるデータが含まれています。たとえば、これらの xml 文字列の多くには、別の関数を使用して生成された Cookie フィールドがあります。

私は、すべての xml 文字列を事前設定された動的フィールド (つまり、Cookie) で初期化する Python 辞書から始めました (つまり、厳密には動的ではありません)。次に、辞書を呼び出して、関連する xml 文字列を取得します。

このアプローチの問題は、Cookie が 1 時間ごとに期限切れになるため、1 時間後にモジュールによって返される文字列に期限切れの値が含まれることです。私が理想的に持ちたいのは、要求された msg_type に基づいて要求されたときに、正しい形式の文字列を返す何らかの形式のジェネレーター関数です (この場合でも可能かどうかはわかりません) (以下の例のように)。この dict に保存されている 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>"""

getCookie() を使用して、これらの xml 文字列をその場で生成できるようにするための良いアプローチは、新しい msg リクエストごとに呼び出されます。任意の入力をいただければ幸いです。

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 に答える