Python中xml缺失元素

1 投票
1 回答
1188 浏览
提问于 2025-04-16 21:36

系统在使用 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、值和名称,然后再把这些信息插入到数据库中。

撰写回答