Python minidom寻找空文本节点

时间:2012-07-17 06:39:29

标签: python replace minidom

我正在使用minidom解析器解析XML文件,我正在迭代XML并将标记之间的特定信息输出到字典中。

像这样:

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)

我仍然收到索引错误...我还考虑过在原始源文件中插入一个空格,但我不确定这是否可以解决问题。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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