gpt4 book ai didi

python - python 中的 xml 缺少元素

转载 作者:行者123 更新时间:2023-12-01 06:09:05 25 4
gpt4 key购买 nike

系统使用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

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

优素福

最佳答案

不要解析整个 xml 然后插入,而是解析每个 vlancard 并检索它的 id/值/名称,然后将它们插入到数据库中。

关于python - python 中的 xml 缺少元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com