2012-07-17 82 views
0

我用minidom解析器解析一个XML文件,在那里我遍历XML并输出标签之间的特定信息到字典中。Python minidom寻找空的文本节点

像这样:

d={} 
dom = parseString(data) 
macro=dom.getElementsByTagName('macro') 
for node in macro: 
    d={} 
    id_name=node.getElementsByTagName('id')[0].toxml() 
    id_data=id_name.replace('<id>','').replace('</id>','') 
    print (id_data) 
    cl_name=node.getElementsByTagName('cl')[1].toxml() 
    cl_data=cl_name.replace('<cl>','').replace('</cl>','') 
    print (cl_data) 
    d_source[id_data]=(cl_data) 

现在,我的问题是,在那里我在cl_name寻找数据= node.getElementsByTagName( 'CL')[1] .toxml()有时不存在!

在此情况下的XML的部分看起来像这样:

<cl>blabla</cl> 
<cl></cl> 

因此我收到一个“索引超出范围”误差。 但是,我的字典里真的需要这个“无”。我的字典应该是这样的:

d={blabla:'',xyz:'abc'} 

我必须寻找空文本节点,我试着这样做:

if node.getElementsByTagName('cl')[1].toxml is None: 
    print ('') 
else: 
    cl_name=node.getElementsByTagName('cl')[1].toxml() 
    cl_data=cl_name.replace('<cl>','').replace('</cl>','') 
    print (cl_data) 
    d_target[id_data]=(cl_data) 
    print(d_target) 

我仍然收到索引错误......我也想过关于在原始源文件中插入一个空白区域,但不知道这是否能解决问题。有任何想法吗?

回答

0

如果minidom不是以某种方式指定的,我建议改变主意并使用标准的xml.etree.ElementTree。这很容易。

+0

我其实试过(见这里:[链接](http://stackoverflow.com/questions/11503336/python-replace-xml-content-with-etree)),但发现这非常复杂,放弃和切换回minidom。 – Kaly 2012-07-17 07:26:26

+0

我已将示例添加到提到的问题中。实际上,ElementTree元素表现为子元素列表。每个元素都有'.attrib'属性,它是属性的字典。 Python思维非常简单。 – pepr 2012-07-17 08:02:21

0

我在将原始空间添加到原始源文件时发现它正在工作。这看起来有点乱。所以如果有人有更好的主意,我很期待!