3razOr1993 Ответов: 1

Разбор XML и сохранение в формате txt


Я хочу разобрать xml-файл и сохранить его в виде txt-файла.

Мой XML-файл выглядит следующим образом:

Меня просто интересует этот атрибут тип внутри атрибута класса. Я хочу просто отобразить значения Демонстрация и Портфолио в текстовом файле

<ADOXML adoversion="Version 5.1" username="Admin" database="adoxxdb" time="10:39" date="21.10.2019" version="3.1">
<MODELS>
<MODEL version="" applib="ADOxx 1.5 Dynamic Experimentation Library" libtype="bp" modeltype="Ressource Model" name="Ressource Model - new" id="mod.47204">
<MODELATTRIBUTES>
<INSTANCE name="Collection of written documents-49041" id="obj.49041" class="Collection of written documents">
<ATTRIBUTE name="Position" type="STRING">NODE x:7cm y:1.5cm index:1</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"/>
<ATTRIBUTE name="Comment" type="STRING"/>
<ATTRIBUTE name="Description" type="STRING"/>
<ATTRIBUTE name="Referenced Document" type="PROGRAMCALL">ITEM "" param:""</ATTRIBUTE>
<ATTRIBUTE name="Display file name" type="INTEGER">0</ATTRIBUTE>
<ATTRIBUTE name="Type of written documents" type="ENUMERATIONLIST">Demonstration;Portfolio</ATTRIBUTE>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML>


Результат должен выглядеть как:

Классен:
Демонстрация
Портфолио

Мой код выглядит следующим образом:

Что я уже пробовал:

import xml.etree.ElementTree as ET

tree=ET.parse(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Resource.xml")

with open(r"C:\Users\benni\Google Drive\MASTER\Masterarbeit\Coden\Output88.txt", "w")as f:
    f.write("Class\n")
    for instance in tree.findall(".//ATTRIBUTE"):
        f.write(f"{instance.get('type')}\n")


Однако я не получаю желаемых результатов. Я просто получаю атрибут ENUMERATIONLIST, но мне нужны его значения.

1 Ответов

Рейтинг:
0

Richard MacCutchan

Я только что запустил ваш код с исправленным* XML, и в нем перечислены все названные записи ATTRIBUTE.

*метка <MODELATTRIBUTES> не имеет соответствующего закрывающего тега, поэтому я удалил его из файла.


3razOr1993

Да, это так, но мне просто нужна демонстрация ценностей и портфолио в качестве конечного результата

Richard MacCutchan

Затем выполните синтаксический анализ значений, как только вы найдете правильный узел. Видеть 19.7. в формате XML.etree.ElementTree — XML API ElementTree — документация по Python 2.7.17[^] для получения дополнительной информации.

3razOr1993

Я прочитал дополнительную информацию, но до сих пор не понимаю, к сожалению.
Моя проблема в том, что я не знаю, как получить демонстрацию значений и портфолио, потому что я не могу получить их с помощью .find(xx).text или .get(xx)

Richard MacCutchan


if instance.get('type') == "ENUMERATIONLIST":
print(instance.text)