Python中xml缺失元素
系统在使用 Python 2.7.2 的 DOM 解析器。我的目标是提取 .db 文件并在 SQL Server 上使用。目前我在使用 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>
像第三个元素一样,有几个元素没有节点。这导致元素的数量不一致。例如:
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
由于这个问题,元素的顺序出现了问题。在打印表格时,解析器会跳过缺失的元素,导致元素的顺序混乱。我使用一个简单的 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
我还可以怎么做呢?任何帮助都将不胜感激。
Yusuf
1 个回答
2
与其一次性解析整个xml文件再进行插入,不如逐个解析每张vlancard,获取它的id、值和名称,然后再把这些信息插入到数据库中。