Mehrzeiligen Text mit Leerzeichen aus einer XML ausgeben mit Python?
Hi, ich arbeite seit neustem etwas mit xml und komme bei dieser Sache nicht weiter. Kann man mehrere xml element Zeilen (mit Zeilenumbrüchen) mit python ausgeben?
z.B. xml
<?xml version="1.0" encoding="utf-8"?>
<roottest xsi:noNamespaceSchemaLocation="test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<messages>Das ist die erste Zeile,
das wäre die zweite Zeile.
Das wäre die dritte Zeile</messages>
</roottest >
python:
elem_counter = 0
for elem in root.findall("./messages"):
out_file.write("text=" + elem.text + '\n')
elem_counter +=1
Ich bekomme so nur die erste Zeile ausgegeben.
-> Das ist die erste Zeile,
Kann man hier alle Zeilen ausgeben, ohne irgendwelche besonderen librarys für das python Script?
Beispiel:
Das ist die erste Zeile,
das wäre die zweite Zeile.
Das wäre die dritte Zeile
1 Antwort
Ich habe es einmal gegengeprüft.
data.xml (UTF-8 kodiert):
<?xml version="1.0" encoding="utf-8"?>
<roottest xsi:noNamespaceSchemaLocation="test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<messages>Das ist die erste Zeile,
das wäre die zweite Zeile.
Das wäre die dritte Zeile</messages>
</roottest>
main.py (Python 3.10):
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
elements = root.findall("./messages")
elem_counter = 0
for elem in elements:
print("text=" + elem.text + '\n')
elem_counter += 1
Ausgabe:
text=Das ist die erste Zeile,
das wäre die zweite Zeile.
Das wäre die dritte Zeile
Das klappt also schon. Prüfe vielleicht noch einmal deine Zeichenkodierung für die XML-Datei und lass dir den Text einmal so wie ich auf der Konsole ausgeben.
Das klappt genauso:
with open("ausgabe.txt", "w") as writer:
for elem in elements:
writer.write("text=" + elem.text + "\n")
elem_counter += 1
hi, danke erstmals für deine Antwort.
Ich habe es auch nochmal getestet, und das funktioniert bei mir nicht :/
Meine XML ist wie deine, utf-8 kodiert, das sagt auch Notepad++
Ich habe das wie von dir Vorgeschlagen, nochmal getestet. Den Text mit print über die Konsole ausgeben zu lassen funktioniert. Ich will diesen Text allerdings in einer Datei ausgeben. Also mit
with open(ausgabe.txt, w) as out_file:
for elem in root.findall("./messages"):
out_file.write("text=" + elem.text + '\n')
elem_counter +=1
in der ausgabe.txt soll dann stehen
text=Das ist die erste Zeile,
das wäre die zweite Zeile.
Das wäre die dritte Zeile