0

私はdjango-pistonを初めて使用し、データをxmlに取得/投稿するときはいつでも、xmlの要素は常に<resource>です。

<response>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-11-30</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>4</resource>
 <resource>2011-12-01</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-02</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-03</resource>
</resource>
<resource>
 <resource>4</resource>
 <resource>0</resource>
 <resource>2011-12-04</resource>
</resource>
</response>

handlers.pyで変更する方法はありますか?リソースを製品に変更したいだけですが、可能であれば、xml要素にIDを設定することもできますか?

4

2 に答える 2

2

独自のXMLEmitterを作成する必要があります。これは、常にのproduct代わりにタグを使用するものですresource

Emitter.construct()モデルはメソッドでdictにシリアル化され、適切に拡張することは不可能であるため、インテリジェントにするためにはもう少し作業が必要です。メソッド内の元のモデルクラスを知り、_to_xml()クラス名に基づいて要素に名前を付けると便利です。

from piston.emitters import Emitter, XMLEmitter

class ProductXMLEmitter(XMLEmitter):
    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):
            for item in data:
                attrs = {}
                # if item contains id value, use it as an attribute instead
                if isinstance(item, dict):
                    attrs["id"] = unicode(item.pop("id"))
                xml.startElement("product", attrs)
                self._to_xml(xml, item)
                xml.endElement("product")
        else:
            super(BetterXMLEmitter, self)._to_xml(xml, data)

# replace default XMLEmitter with ours
Emitter.register('xml', ProductXMLEmitter, 'text/xml; charset=utf-8')

また、 https://github.com/pbs-education/django-pistonでPBSEducationのdjango-pistonフォークを確認することもできます。PistonViewsを使用して他の方法で出力をカスタマイズできます。

于 2011-12-02T07:53:36.297 に答える
0

Elementtreeがお手伝いします。変更したいものは何でも変更できます。ファイルを読み取り、elementreeを使用して解析し、値を更新して、(必要に応じて)ファイルに再度配置します。

于 2011-12-02T07:27:24.907 に答える