システムは python 2.7.2 で dom パーサーを使用します。目標は、.db ファイルを抽出し、SQL サーバーで使用することです。現在、sqlite3 ライブラリに問題はありません。XMLファイルの解析中に欠落している要素を処理する方法について、同様の質問/回答を読みましたが、それでも解決策がわかりませんでした。xml には 15000 以上の要素があります。xml の基本的なコードは次のとおりです。
<topo>
<vlancard>
<id>4545</id>
<nodeValue>21</nodeValue>
<vlanName>voice</vlanName>
</vlancard>
<vlancard>
<id>1234</id>
<nodeValue>42</nodeValue>
<vlanName>camera</vlanName>
</vlancard>
<vlancard>
<id>9876</id>
<nodeValue>84</nodeValue>
</vlancard>
</topo>
3 番目の要素のように、いくつかの要素にはノードがありません。これにより、要素番号に矛盾が生じます。すなわち
from xml.dom import minidom
xmldoc = minidom.parse('c:\vlan.xml')
vlId = xmldoc.getElementsByTagName('id')
vlValue = xmldoc.getElementsByTagName('nodeValue')
vlName = xmldoc.getElementsByTagName('vlanName')
モジュールを実行した後:
IndexError: list index out of range
>>> len(id)
16163
>>> len(vlanName)
16155
この問題により、要素の順序付けに問題が発生します。table を印刷している間、パーサーは欠落している要素を渡し、要素の順序が混同されます。単純な while ループを使用して、値をテーブルに挿入します。
x=0
while x < (len(vlId)):
c.execute('''insert into vlan ('id','nodeValue','vlanName') values ('%s','%s','%s') ''' %(id[x].firstChild.nodeValue, nodeValue[x].firstChild.nodeValue, vlanName[x].firstChild.nodeValue))
x= x+1
他にどうすればこれを行うことができますか? どんな助けでも大歓迎です。
ユスフ