Синтаксический анализ xml с использованием импорта minidom с условиями if

 <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Lion" />

       </Game:quit>
       <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Tiger" />

       </Game:quit>
       <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Leopard" />

       </Game:quit>
       <Game:quit>

           <Game:DimensionSet AnimalSet="Name" />
           <Game:Value Value="Elephant" />

       </Game:quit>

   <Game:quit>

          <Game:AnimalSet AnimalSet="Place" />
          <Game:Value Value="USA" />

Это кусок xml из моего sample.xml, который меня больше всего интересует. Я хочу проанализировать этот xml таким образом, используя библиотеку импорта minidom import из xml.dom, которую я запускаю, если условия и если значение AnimalSet равно "Name", оно будет сохранять / добавлять свои значения, которые являются "Lion", "Tiger". "," Леопард "и" Слон "в каком-то списке. elif, если AnimalSet имеет значение "Поместить", он должен сохранить / добавить "США" в другой список.

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

Любая помощь? Пожалуйста, задавайте вопросы, если еще что-то не понятно Спасибо

1 ответ

Решение

Это похоже на миссию для XPath, поэтому в качестве альтернативы минидому вы можете использовать ElementTree, чей findall Метод может найти все элементы с Value приписывать.

import xml.etree.ElementTree as ET

doc = ET.parse(path_to_xml_file)
values = doc.findall('.//*[@Value]')
print [value.get('Value') for value in values]

Для Python 2.6.6 ElementTree не может искать атрибуты, поэтому вы должны использовать что-то еще. Там должно быть xmlns:Game псевдоатрибут в начале файла; скопировать его значение в xmlns переменная, и попробуйте следующее.

import xml.etree.ElementTree as ET

xmlns =  # the value of xmlns:Game
doc = ET.parse(path)
values = doc.findall('.//Game:Value', namespaces={'Game': xmlns})
print [value.get('Value') for value in values]
Другие вопросы по тегам