Анализ синтаксиса Python с использованием ElementTree на основе условий IF - PullRequest
0 голосов
/ 07 июня 2018

Используя Python, я пытаюсь проанализировать файл XML, чтобы получить значение элемента на основе значения атрибута 'name' И значение дочернего элемента на основе значения атрибута 'name' какхорошо.

Условия:

Если атрибут категории равен 3 в элементе 'test', тогда возьмите значение атрибута 'name'

AND

Получить значение элемента 'color' ЕСЛИ значение атрибута 'name' равно 'enable'

Пример кода:

<test category="1">
 <test category="2">
  <test name="1" category="3">
   <color name="disable">blue</color>
   <color name="disable">yellow</color>
   <color name="enable">red</color>
   <color name="disable">orange</color>
  </test>
  <test name="2" category="3">
   <color name="disable">green</color>
   <color name="disable">purple</color>
   <color name="enable">white</color>
   <color name="disable">gray</color>
  </test>
 </test>
</test>

Ожидаемые результаты:

1 красный

2 белый

Мой текущий код:

import xml.etree.ElementTree as ET
tree = ET.parse('C:/colors.xml')
root = tree.getroot()

for test in root.getiterator('test'):

if test.attrib['category']=="3":
    print test.attrib['name']

Это дает мне:

1
2

Я пробовал вложенный FORчтобы получить значение элемента цвета, но все, что я пробовал, кажется, начинается с самого начала.

Любая помощь будет оценена!

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018
  • Имейте в виду, что ваш XML искажен (значения атрибутов должны быть в кавычках)
  • Несоответствие color теги

Ваша логика использует 2 условия, которые отсутствуют вваш код.

string = '''<test category="1">
<test category="2">
<test name="1" category="3">
<color name="disable">blue</color>
<color name="disable">yellow</color>
<color name="enable">red</color>
<color name="disable">orange</color>
</test>
<test name="2" category="3">
<color name="disable">green</color>
<color name="disable">purple</color>
<color name="enable">white</color>
<color name="disable">gray</color>
</test>
</test>
</test>'''

from xml.etree import ElementTree as ET

root = ET.fromstring(string)

for test_node in root.iter('test'):
    if test_node.attrib['category'] == "3":
        for color_element in test_node.iter('color'):
            if color_element.attrib['name'] == 'enable':
                print(test_node.attrib['name'], color_element.text)

#  1 red
#  2 white
...