0

それぞれが特定の documentRoot タグを持つ XML 形式のデータ パケットを受信して​​います。ルート タグ名に基づいて、これらのパケットを処理する特殊なメソッドを委任したいと考えています。これは、次のような xml.dom.minidom で機能しました。

dom = minidom.parseString(the_data)
root = dom.documentElement
deleg = getattr(self,'elem_' + str(root.tagName))
deleg(dom)

ただし、よりpythonicなlxml.objectifyを使用して、(ここではなく、コードの他の部分で)物事を簡素化したい.

問題は、lxml、できれば厳密に lxml.objectify で「root.tagName」を取得する方法がわからないことです。何か案は?

4

2 に答える 2

3

lxml docsと dir() built_inの助けを借りて、これを作成することができました:

>>> from lxml import objectify
>>> import StringIO
>>> tree = objectify.parse(StringIO.StringIO('<parent><child>Billy</child><child>Bob</child></parent>'))
>>> root = tree.getroot()
>>> root.tag
'parent'
>>> [(foo.tag, foo.text) for foo in root.getchildren()]
[('child', 'Billy'), ('child', 'Bob')]
>>>

次のようなものが必要なようです

deleg = getattr(self,'elem_' + str(root.tag))
deleg(tree)
于 2009-12-13T22:35:30.300 に答える
0

FWIW Amara Binderyでは、次のようなことができます。

from amara import bindery
doc = bindery.parse(the_data)
top_elem = doc.xml_elements.next()
deleg = getattr(self, 'elem_' + str(top_elem.xml_qname))
deleg(doc)

また、Pythonic API も取得します。たとえば、次のようになります。doc.html.head.title = u"Change HTML document title"

于 2009-12-13T18:30:08.710 に答える