Система использует dom-парсер в python 2.7.2.Цель - извлечь файл .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
Из-за этой проблемы возникает проблема упорядочения элементов.во время печати таблицы парсер пропускает отсутствующие элементы, и порядок элементов смешивается.Я использую простой цикл 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
Как еще я могу это сделать?Любая помощь будет оценена.
Юсуф