0

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)

まだインデックス作成エラーが表示されます... 元のソース ファイルに空白を挿入することも考えましたが、これで問題が解決するかどうかはわかりません。何か案は?

4

2 に答える 2

0

ミニドムがどういうわけか指示されていない場合は、気が変わって標準の xml.etree.ElementTree を使用することをお勧めします。はるかに簡単です。

于 2012-07-17T07:23:01.523 に答える
0

元のソースファイルに空白を追加するとうまくいくことがわかりました。ただし、これは少し面倒に見えます。誰かがより良いアイデアを持っているなら、私はそれを楽しみにしています!

于 2012-07-17T07:23:54.020 に答える