python判断xml的iter为空_使用LXML和Python解析空白XML标记

你正在放置一个[text()]过滤器,该过滤器只显示那些有文本节点的元素......然后当你没有给出没有文本节点的元素时你会不高兴吗?

保留该过滤器,您将获得您的模型元素:

>>> s='''

...

...

... Blue

... Chevy

...

...

... '''

>>> e = lxml.etree.fromstring(s)

>>> carData = e.xpath('Car/node()')

>>> carData

[, , ]

>>> dict(((e.tag, e.text) for e in carData))

{'Color': 'Blue', 'Make': 'Chevy', 'Model': None}也就是说 - 如果您的直接目标是迭代树中的节点,您可以考虑使用lxml.etree.iterparse(),这将避免尝试在内存中构建完整的DOM树,否则比构建树然后迭代更有效使用XPath。 (想想SAX,但没有疯狂和痛苦的API)。

使用iterparse实现可能如下所示:

def get_cars(infile):

in_car = False

current_car = {}

for (event, element) in lxml.etree.iterparse(infile, events=('start', 'end')):

if event == 'start':

if element.tag == 'Car':

in_car = True

current_car = {}

continue

if not in_car: continue

if element.tag == 'Car':

yield current_car

continue

current_car[element.tag] = element.text

for car in get_cars(infile = cStringIO.StringIO('''BlueChevy''')):

print car...它是更多的代码,但是(如果我们没有使用StringIO作为示例)它可以处理比内存中更大的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值