У меня возникают две проблемы с разбором XML-файла. Я хочу только вернуть один набор свойств I.E только значения свойств в первом Процессе, и я хочу вернуть второй Источник во втором Процессе. Когда я использую свой код, он возвращает Source в первых источниках и первом источнике во втором источнике, но я не могу получить второй источник для возврата.Разбор XML-файла с использованием ElementTree
файл XML выглядит следующим образом:
<!-- The description of the process -->
<Description>"This is a description"</Description>
<!-- info on process to be run -->
<Process expectFailure="false">
<Code>Import</Code>
<Sources>
<Source>"Test Data"</Source>
</Sources>
<Destination>Buffered</Destination>
<Properties>
<Property code="format" value="CC"/>
<Property code="Input" value="10N"/>
<Property code="Method" value="BASIC"/>
<Ppoperty code="Resolution" value="5"/>
<Property code="Convention" value="LEFT"/>
<Property code="Bounding" value="BUFFERED"/>
</Properties>
</Process>
<!-- info on second process to be run (compare) -->
<Process>
<Code>SurfaceCompare</Code>
<Sources>
<Source>expectedOutput</Source>
<Source>Buffered</Source>
</Sources>
<Properties>
<Property code="compare_designated" value="true"/>
<Property code="compare_metadata" value="true"/>
<Property code="metadata_type" value="OTHER"/>
</Properties>
</Process>
и код выглядит
from xml.etree import ElementTree
tree = ElementTree.parse("XML_example.xml")
description = tree.findtext("Description")
print(description)
for process in tree.findall('Process'):
for source in process.findall('Sources'):
source_text = source.findtext('Source')
print(source_text)
#returns everything
for property in process.iter('Property'):
print(property.attrib.get('code'))
print(property.attrib.get('value'))
for process in tree.findall('Process'):
for source in process.findall('Sources'):
source = source.findtext('Source')
print(source)
Я пробовал много различных способов использования findall, find, iter, get, getiter. Я уверен, что у меня что-то не хватает, но это был долгий день, и для меня жизнь я не вижу, чего не хватает.
Существует также возможность изменить способ создания XML, но я знаю, что должен быть способ решить этот вопрос, и он грызет меня.
Пример надлежащего вывода для источников:
"Test Data"
expectedOutput
buffered
Образец Надлежащий вывод 1 для свойств:
format
CC
Input
10N
Method
BASIC
Convention
LEFT
Bounding
BUFFERED
Образец Надлежащий вывод 2:
compare_designated
true
compare_metadata
true
metadata_type
OTHER
Спасибо. У меня нет времени попробовать сейчас, но это выглядит многообещающе. Попробуй, когда я вернусь домой. – erics12512354
@ erics12512354, не беспокойтесь, не торопитесь, и я уверен, что как только вы поймете, как работает ** путь **, у вас возникнет проблема с решением проблемы. – Anzel
Работает. Я не понимал, что вы можете добавить позиционные аргументы в пути к файлам, и мне не хватало ./, и когда я это пробовал. Еще раз спасибо. – erics12512354