Seite 1 von 1

rss / xml erzeugen (human readable)

Verfasst: Sonntag 29. Januar 2017, 23:40
von sveni_lee
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>

Re: rss / xml erzeugen (human readable)

Verfasst: Montag 30. Januar 2017, 21:09
von sveni_lee
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()))

Re: rss / xml erzeugen (human readable)

Verfasst: Samstag 4. Februar 2017, 22:55
von sveni_lee
kann man das ganze auch irgendwie umkehren?
also eine "formatierte" xml einlesen und in eine zeile "unformatiert ausgeben?