2016-08-23 7 views
2

Я пытаюсь проанализировать приведенный ниже XML-файл, но с трудностями получить конкретное значение элемента. Я пытаюсь указать элемент «Item_No_2», чтобы получить связанное значение <v>2222222222</v>, но не могу сделать это с помощью get.element ('Item_No_2'). Я использую значение get.element неправильно?Значение элемента элемента Python для определенного элемента

XML файла:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="Data.xsl"?> 
<abc> 
    <md> 
    <mi> 
     <datetime>20160822020003</datetime> 
     <period>3600</period> 
     <it>Item_No_1</it> 
     <it>Item_No_2</it> 
     <it>Item_No_3</it> 
     <it>Item_No_4</it> 
     <it>Item_No_5</it> 
     <it>Item_No_6</it> 
     <it>Item_No_7</it> 
     <ovalue> 
     <v>1111111111</v> 
     <v>2222222222</v> 
     <v>3333333333</v> 
     <v>4444444444</v> 
     <v>5555555555</v> 
     <v>6666666666</v> 
     <v>7777777777</v> 
     </ovalue> 
    </mi> 
    </md> 
</abc> 

Мой код:

from xml.etree.ElementTree import parse 

doc = parse('test.xml').getroot() 

for element in doc.findall('md/mi/'): 
    print(element.text) 

for element in doc.findall('md/mi/ovalue/'): 
    print(element.text) 

Ток на выходе получает их по отдельности, но я не могу понять, как вызвать определенное значение элемента.

Выход:

20160822020003 
3600 
Item_No_1 
Item_No_2 
Item_No_3 
Item_No_4 
Item_No_5 
Item_No_6 
Item_No_7 


1111111111 
2222222222 
3333333333 
4444444444 
5555555555 
6666666666 
7777777777 

попытался это, но не получилось:

for element in doc.findall('md/mi/ovalue/'): 
    print(element.get('Item_No_1')) 

ответ

1

Там нет Item_No_1 на элементах, которые находятся на doc.findall('md/mi/ovalue/').

Я думаю, что вы можете попытаться сделать, это получить оба списка

items = [e.text for e in doc.findall('md/mi/it')] 
values = [e.text for e in doc.findall('md/mi/ovalue/v')] 

Затем найти индекс строки 'Item_No_1' из items, а затем индекс в values с этим номером.

В качестве альтернативы, zip два списка вместе и проверьте, когда найдете один элемент.

for item,value in zip(doc.findall('md/mi/it'), doc.findall('md/mi/ovalue/v')): 
    if item.text == 'Item_No_1': 
     print(value.text) 

Там может быть лучше, но те первые способы, которые приходят на ум

+0

Спасибо за ответ. Вторая альтернатива с ZIP дает мне неправильный результат. Предоставляет 3333333 вместо 111111, вы знаете, почему? Мне нравится первый вариант, но можете ли вы рассказать мне, как получить индекс? – MBasith

+1

использовать 'для элемента, значение в zip (doc.findall ('md/mi/it'), doc.findall ('md/mi/ovalue/v')):' – FujiApple

+0

@FujiApple Спасибо, это сделало трюк получите результат, соответствующий элементу. Теперь мне просто нужно поиграть еще немного и выяснить, как я могу последовательно получить правильный совпадение в более крупном xml с несколькими элементами, которые не имеют переменное количество значений. Приветствия. – MBasith

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

  • Нет связанных вопросов^_^