2

XML シリアライゼーション フレームワークSimple XML in Java の使いやすさに感銘を受けた後、同様の方法でクラスとその XML シリアライゼーションの実装を容易にする Python の対応物を探してみました。これまでのところ、私は多かれ少なかれ手ぶらでやってきましたが、興味深い候補があります (ただし、私が知る限り、便利にデコレータを使用しているものはありません)。たとえば、私はdexmlを見始めましたが、の逆シリアル化を可能にするクラスを実装するのと同じくらい簡単な例に困惑しました

<Error Code="0">OK</Error>

Simple in Java を使用すると、次のようなクラスを作成できます。

@Root(name="Error")
public class Error {

    @Attribute(name = "Code")
    private int code;  // public getter and setter

    @Text(required = false) 
    private String description; // public getter and setter
}

Simple for Java と同様のフレームワークが Python に既に存在しますか? 必須ではありませんが、私は Python 2.6 のサポートを好みます。Python 3 でのみサポートされている場合は、それも調べます。

4

2 に答える 2

2

実際、この構文は dexml でサポートされています。それを理解するのにしばらく時間がかかりました(ソースコードを読むことが役に立ちました)。

class Error(dexml.Model):
    code = dexml.fields.String()
    value = dexml.fields.String(tagname=".")

以下は、desire の xml レンダリングを返します。

e = Error(code="0",value="OK")
print e.render(fragment=True)
于 2013-11-12T21:41:02.930 に答える
0

答えはありませんが、dexml を使用して例を解析することの難しさを確認します。属性とテキストノードを持つ要素を解析する方法があるようには見えません。Code 属性の定義は簡単です。

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")

ただし、子テキスト ノードを参照する方法はありません。次のようなことをしたい:

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")
    text = dexml.fields.String(textnode=True)

テキストをキャプチャするためのあまり満足できない方法の 1 つは、追加のタグでラップすることです。

<Error Code="0"><text>OK</text></Error>

次に、クラスを次のように定義できます。

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")
    text = dexml.fields.String(tagname="text")
于 2013-11-09T04:08:28.080 に答える