rss / xml erzeugen (human readable)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

hallo zusammen,

ich bin gerade dabei mir einen eigenen rss feed zubauen...

den "Kopf" erstelle ich folgender maßen:

Code: Alles auswählen

rss = ElementTree.Element("rss", {"version":"2.0"})
    chanal = ElementTree.SubElement(rss, "chanal")
    title = ElementTree.SubElement(chanal, "title")
    title.text = "..."
    description = ElementTree.SubElement(chanal, "description")
    description.text = "..."
    link = ElementTree.SubElement(chanal, "link")
    link.text = "..."
    ttl = ElementTree.SubElement(chanal, "ttl")
    et = ElementTree.ElementTree(rss)
    et.write("D:/RSS.xml")
die einzenen items werden inhalb einer Schleife geschrieben:

Code: Alles auswählen

tree = ElementTree.parse("D:/RSS.xml")
    root = tree.getroot()
    chanal = root.find("chanal")
    item = ElementTree.SubElement(chanal, "item")
    a = ElementTree.SubElement(item, "a")
    a.text = "TEXT
    b = ElementTree.SubElement(item, "b")
    b.text = "TEXT"
    imdb = ElementTree.SubElement(item, "c")
    c.text = number
    et = ElementTree.ElementTree(root)
    et.write("D:/RSS.xml")
soweit funktionirt auch alles. nur wird die xml in einer Reihe geschrieben was ja auch bei Elementtree so üblich ist. Ich habe auch gelesen wie man
die xml mit prettify in "Form" bringen kann, was auch funktioniert... nur wie kann ich es auch "Human Readable" als xml speichern?

das ganze sollte so abgespeichert sein

Code: Alles auswählen

<rss version="2.0">
	<chanal>
		<title>...</title>
		<description>...</description>
		<link>...</link>
		<ttl />
		<item>
			<a>TEXT</a>
			<b>TEXT</b>
			<c />
		</item>
		<item>
			<a>TEXT</a>
			<b>TEXT</b>
			<c />
		</item>
		<item>
			<a>TEXT</a>
			<b>TEXT</b>
			<c />
		</item>
	</chanal>
</rss>
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

okay... einfach mal das Forum durchsuche hat mein Problem gelöst...

ich habe folgendes eingefügt:

Code: Alles auswählen

def prettify(elem):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ", encoding='UTF-8')
und dann nach dem durchlaaufen der Schleife mit allen SubElementen folgendes angefügt:

Code: Alles auswählen

    # make human readable
    tree = ElementTree.parse("D:/RSS.xml")
    with open ('D:/RSS.xml', 'w') as f:
        f.write(prettify(tree.getroot()))
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

kann man das ganze auch irgendwie umkehren?
also eine "formatierte" xml einlesen und in eine zeile "unformatiert ausgeben?
Antworten