XML отсутствующий элемент в Python - PullRequest
1 голос
/ 15 июля 2011

Система использует 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

Как еще я могу это сделать?Любая помощь будет оценена.

Юсуф

1 Ответ

2 голосов
/ 15 июля 2011

Вместо того, чтобы анализировать весь xml и затем вставлять, анализируйте каждую vlancard, извлекая его id / value / name, а затем вставляйте их в базу данных.

...