1

系统在 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>

与第三个元素一样,有几个元素没有节点。这会导致元素编号不一致。IE

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

我还能怎么做?任何帮助将不胜感激。

优素福

4

1 回答 1

2

不是解析整个 xml 然后插入,而是解析每个 vlancard 检索它的 id/value/name,然后将它们插入数据库。

于 2011-07-15T13:52:54.180 回答