2012-01-24 2 views
1

У меня есть следующий очень простой XML-файл, и я хочу быстро разобрать элементы imsi для каждого устройства с помощью мини-диска.Python XML Processing in minidom

<device> 
     <imsi>01010101</imsi> 
    </device> 
    <device> 
     <imsi>123456</imsi> 
    </device> 
    <device> 
     <imsi>9876543</imsi> 
    </device> 

    -------------------------- 
    CODE SNIPPET FOR PARSING 
    -------------------------- 

    doc = xml.dom.minidom.parse("./input.xml") 

    for node in doc.getElementsByTagName("device"): 
      imsi = node.getElementsByTagName("imsi") 
      print str(imsi) 

Когда я выполняю приведенный выше фрагмент кода, я получаю следующую ошибку в терминале. Какое улучшение, по вашему мнению, я должен внести в приведенный выше код для анализа элементов imsi для каждого устройства? Благодарю.

doc = xml.dom.minidom.parse("./input.xml") 
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse 
return expatbuilder.parse(file) 
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 926, in parse 
result = builder.parseFile(fp) 
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in parseFile 
parser.Parse(buffer, 0) 
xml.parsers.expat.ExpatError: junk after document element: line 4, column 0 

После того как я представил корневой узел, я написал следующий код, в результате которого появился странный вывод. Как вы думаете, что здесь неправильно?

 doc = xml.dom.minidom.parse("./input.xml") 
    for node in doc.getElementsByTagName("device"): 
     imsi = node.getElementsByTagName("imsi") 
     print str(imsi) 

    [<DOM Element: imsi at 0x828636c>] 
    [<DOM Element: imsi at 0x82864ac>] 
    [<DOM Element: imsi at 0x828660c>] 

После кода решить мою проблему и oprinted элементы IMSI правильно:

for node in doc.getElementsByTagName("device"): 
     imsi = node.getElementsByTagName("imsi") 
     for a in imsi: 
       Title= a.firstChild.data 
       print Title 

ответ

2

Ваш образец не является действительным документом XML, поскольку он не имеет корневой узел. Вставьте один, чтобы получить что-то вроде

<devices> 
    <device> 
    <imsi>01010101</imsi> 
    </device> 
    <device> 
    <imsi>123456</imsi> 
    </device> 
    <device> 
    <imsi>9876543</imsi> 
    </device> 
</devices> 
1

Ваш xml недействителен. Вставьте корневой узел в свой xml.

Вы можете проверить действительность здесь W3C Markup Validator.

<document> 
    <device> 
     <imsi>01010101</imsi> 
    </device> 
    <device> 
     <imsi>123456</imsi> 
    </device> 
    <device> 
     <imsi>9876543</imsi> 
    </device> 
</document> 

Если вы хотите, чтобы ваш XML, чтобы быть полностью достоверны, чем добавить document type declaration к нему.

+0

Пожалуйста, см. Мой выше комментарий в вопросительном коде не выглядит красивым в разделе добавления комментариев. Thanx. –

Смежные вопросы