我喜欢ElementTree解析xml的方式,特别是Xpath功能.我有一个带有嵌套标签的应用程序的xml输出.
我想按名称访问此标记而不指定命名空间,是否可能?例如:
root.findall("/molpro/job")
Run Code Online (Sandbox Code Playgroud)
代替:
root.findall("{http://www.molpro.net/schema/molpro2006}molpro/{http://www.molpro.net/schema/molpro2006}job")
Run Code Online (Sandbox Code Playgroud)
至少使用lxml2,可以在某种程度上减少这种开销:
root.findall("/n:molpro/n:job",
namespaces=dict(n="http://www.molpro.net/schema/molpro2006"))
Run Code Online (Sandbox Code Playgroud)
您可以编写自己的函数来包装令人讨厌的位,例如:
def my_xpath(doc, ns, xp);
num = xp.count('/')
new_xp = xp.replace('/', '/{%s}')
ns_tup = (ns,) * num
doc.findall(new_xp % ns_tup)
namespace = 'http://www.molpro.net/schema/molpro2006'
my_xpath(root, namespace, '/molpro/job')
Run Code Online (Sandbox Code Playgroud)
我承认并不是那么有趣,但至少你可以阅读你的xpath表达式.
| 归档时间: |
|
| 查看次数: |
8863 次 |
| 最近记录: |