首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lxml[.objectify] documentElement tagName

lxml[.objectify] documentElement tagName
EN

Stack Overflow用户
提问于 2009-12-13 22:16:04
回答 2查看 948关注 0票数 0

我正在接收XML格式的数据包,每个数据包都有一个特定的documentRoot标记,我想根据根标记名委托专门的方法来处理这些数据包。这对xml.dom.minidom很有效,就像这样:

代码语言:javascript
复制
dom = minidom.parseString(the_data)
root = dom.documentElement
deleg = getattr(self,'elem_' + str(root.tagName))
deleg(dom)

但是,我想通过使用pythonic风格更强的lxml.objectify来简化代码(在代码的其他部分,而不是这里)。

问题是我不知道如何使用lxml获得"root.tagName“,最好是严格意义上的lxml.objectify。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-14 06:35:30

lxml docs和dir() built_in的帮助下,我设法生成了以下代码:

代码语言:javascript
复制
>>> 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')]
>>>

看起来你需要像这样的东西

代码语言:javascript
复制
deleg = getattr(self,'elem_' + str(root.tag))
deleg(tree)
票数 3
EN

Stack Overflow用户

发布于 2009-12-14 02:30:09

顺便说一句,在Amara Bindery中,你可以这样做:

代码语言:javascript
复制
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,例如:doc.html.head.title = u"Change HTML document title"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1896628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档