您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 更紧凑的ElementTree或lxml命名空间

5b51 2022/1/14 8:20:48 python 字数 3836 阅读 496 来源 www.jb51.cc/python

当子元素作为父元素位于不同的命名空间时,我试图在ElementTree或lxml中获得命名空间的紧凑表示.这是基本的例子:from lxml import etree country = etree.Element('country') name = etree.SubElement(country, '{urn:test}name') name.tex

概述

当子元素作为父元素位于不同的命名空间时,我试图在ElementTree或lxml中获得命名空间的紧凑表示.这是基本的例子:

from lxml import etree

country = etree.Element("country")

name = etree.SubElement(country,"{urn:test}name")
name.text = "Canada"
population = etree.SubElement(country,"{urn:test}population")
population.text = "34M"
etree.register_namespace('tst','urn:test')

print( etree.tostring(country,pretty_print=True) )

我也试过这种方法

ns = {"test" : "urn:test"}

country = etree.Element("country",nsmap=ns)

name = etree.SubElement(country,"{test}name")
name.text = "Canada"
population = etree.SubElement(country,"{test}population")
population.text = "34M"

print( etree.tostring(country,pretty_print=True) )

在这两种情况下,我得到这样的东西:


  

虽然这是正确的,但我希望它不那么冗长 – 这可能成为大数据集的真正问题(特别是因为我使用比’urn:test’更大的NS).

如果我可以将’country’放在“urn:test”命名空间内,并像这样声明它(在上面的第一个例子中):

country = etree.Element("{test}country")

然后我得到以下输出


  

但我真正想要的是:


  

有任何想法吗?

from xml.etree import cElementTree as ET
##ET.register_namespace('tst','urn:test')
country = ET.Element("country")
name = ET.SubElement(country,"{urn:test}name")
name.text = "Canada"
population = ET.SubElement(country,"{urn:test}population")
population.text = "34M"
print prettify(country)

上面将给出(没有注册任何命名空间):


  

并且,当我删除评论的部分时,它将给出::


  

注意:美化功能here

总结

以上是编程之家为你收集整理的python – 更紧凑的ElementTree或lxml命名空间全部内容,希望文章能够帮你解决python – 更紧凑的ElementTree或lxml命名空间所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶