Flask und XML

Django, Flask, Bottle, WSGI, CGI…
Antworten
Fran(z)cisco
User
Beiträge: 4
Registriert: Montag 10. September 2018, 09:50

Hallo,

ich will mit Flask eine locale XML-Datei von einem Server einlesen und dann als "reines" XML im Browser darstellen.
Die Darstellung soll z.B. wie folgt aussehen:
https://www.ecb.europa.eu/stats/eurofxr ... -daily.xml
Allerdings versucht der Browser dies zu interpretieren und einzelne Elemente der XML-Datei werden als reiner Text dargestellt.
Habe schon diverse MimeType-Einstellungen versucht ...

Hat jemand eine Idee, wie man so was lösen kann … ?

Code:
##################################################################################################################
from flask import Flask, request, send_from_directory
import os

app = Flask(__name__)

@app.route("/xmldata")
def startXmlData():
_xml_file = request.args.get("xmlFile")
_xml_auftrag_folder = "C:/Python/Beispiele/xmlFiles"
_xml_auftrag_file = _xml_auftrag_folder + "/" + _xml_file + ".xml"
return send_from_directory(os.path.dirname(_xml_auftrag_file),os.path.basename(_xml_auftrag_file), mimetype='text/xml', as_attachment=False)
##################################################################################################################


Mit freundlichen Grüßen,
Mühlbauer Franz
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Fran(z)cisco: Was meinst Du mit „"reines" XML“? Wenn ich den angegebenen Link im Firefox aufrufe wird mir nur der Text „Reference rates European Central Bank“ im Browser angezeigt. Wenn ich das XML-Dokument selbst sehen möchte, muss ich die Quelltextansicht aufrufen. Wie ein Browser das XML-Dokument anzeigt liegt nicht in Deiner Kontrolle. Ausser wenn es ein XHTML-Dokument ist, würde ich nicht erwarten das ein Browser da etwas ausser den Textinhalt der Elemente anzeigt. Zumindest nicht solange kein Plugin installiert ist, was Du ja nicht unter Kontrolle hast, oder vielleicht ein Stylesheet mit einer „xml-stylesheet processing instruction“ im XML-Dokument angegeben wird.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst den Inhalt der XML-Datei auch in <pre>...</pre> Tags setzen, dann wird dier Inhalt durch den Broweser nur dargestellt und nicht verareitet. Ob das dann lesbar ist oder nicht hängt davon ab, wie die XML-Datei formatiert ist, also mit / ohne Zeilenumbrüchen, Einrückungen etc.

Gruß, noisefloor
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum Code:
`send_from_directory` ist dazu da, Dateien aus einem Verzeichnis heraus zu schicken, wobei der erste Teil ein sicherer Pfad ist und der zweite der unsichere von außen kommende Teil. So wie Du es benutzt, wird alles als sicher angenommen. Pfade setzt man auch nicht mit + sondern mit os.path.join zusammen. Variablen, die mit _ anfangen, werden per Konvention nicht benutzt, müssen aber wegen des Interfaces als Funktionsargument bzw. Rückgabewert angegeben werden. Du benutzt aber alle Variablen. Konstanten schreibt man komplett groß und an den Anfang der Datei.

Code: Alles auswählen

XML_AUFTRAG_FOLDER = "C:/Python/Beispiele/xmlFiles"

@app.route("/xmldata")
def start_xml_data():
    xml_file = request.args.get("xmlFile")
    return send_from_directory(XML_AUFTRAG_FOLDER, xml_file + ".xml", mimetype='text/xml')
Antworten