Elementtree Einstellungen

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.
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Hallo an Alle,

dies ist mein erster Post hier im Forum, also bitte um Nachsicht. :roll:

Die Frage ist gleich ziemlich speziell:

Ich verwende zur Zeit zum Bearbeiten eines xml- Files den Elementtree. Dieser gibt die Attributwerte zum Beispiel <person id="1"> in diesen Zeichen aus: ""

Mein Problem: Ich benötige für ein bestimmtes Programm allerdings Folgendes: <person id='1'> also die Ausgabe des Attributwertes nicht in diesen Zeichen "" sondern in diesen ''.

Gibt es also für die write- Funktion eine Einstellung in der man das realisieren kann?

Grüße

Killigen
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Die Double Quotes sind fest codiert, das kannst du nicht mittels Parametern steuern. Du könntest natürlich das XML in einen String umwandeln und mittels replace die Quotes entsprechend ersetzen. Ich würde mich aber nicht darauf verlassen, dass das unbedingt in jedem Fall funktioniert.

Warum brauchst du die Änderung überhaupt? Beide Varianten sind zulässig, dein anderes Programm sollte damit klarkommen. Kannst du nicht dort ansetzen? Das wäre die saubere Lösung.
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Killigen: ein Programm, das valides XML verarbeiten kann, kommt mit beiden Varianten klar. Was ist denn das für ein anders Programm, das damit Probleme hat?
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Leider verwende ich das Programm in der Arbeit und es ist sehr projektspezifisch.

Es gibt also keine Möglichkeit die Werte so ausgeben zu lassen: abc='xyz'?

Eine wichtige Frage, die sich mir noch stellt: Ich bekomme vor dem xml_File diese zwei Zeilen nicht hin:

<?xml version='1.0' encoding='utf-8' standalone='no'?>
<!DOCTYPE CANDELA SYSTEM 'candela.dtd'>

es wird gleich mit dem root- Element gestartet...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Killigen hat geschrieben:Leider verwende ich das Programm in der Arbeit und es ist sehr projektspezifisch.
Das bedeutet ja nicht automatisch, dass man da drin nichts korrigieren kann ;-)
Killigen hat geschrieben: Es gibt also keine Möglichkeit die Werte so ausgeben zu lassen: abc='xyz'?
EyDu hatte Dir doch schon eine Lösung genannt!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Killigen: Die XML-Deklaration bekommt man mit dem entsprechenden Argument beim serialisieren. Den DOCTYPE wohl nur hässlich manuell oder man verwendet `lxml.etree` das dafür auf `ElementTree`-Objekten ein `docinfo`-Attribut hat über das man unter anderem den DOCTYPE setzen und auslesen kann.

Wenn dieses andere Programm kein XML verarbeiten kann dann würde ich auf jeden Fall einen Bugreport beim Autor aufmachen. Da wird extra ein allgemeines Rahmendatenformat für den einfacheren Austausch zwischen Programmen spezifiziert und dann gibt es immer wieder Leute die es schaffen das nicht zu ordentlich verarbeiten oder invalides XML zu produzieren. Das ist ein Armutszeugnis. :evil:
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Vielen dank an alle für eure Antworten!

Habe das Tool jetzt so angepasst damit ich keine Probleme mehr habe!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Killigen hat geschrieben: Habe das Tool jetzt so angepasst damit ich keine Probleme mehr habe!
Also noch mal zum Verständnis: Du konntest also das Programm korrigieren, welches das fehlerhafte XML produziert hat?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Nein das "fehlerhafte" xml wurde ja vom Elementtree produziert...
Aber das welches Probleme hatte mit dem Einlesen konnte ich jetzt abändern...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Killigen hat geschrieben:Nein das "fehlerhafte" xml wurde ja vom Elementtree produziert...
Äh... nö! Ganz sicher nicht!
Killigen hat geschrieben: Aber das welches Probleme hatte mit dem Einlesen konnte ich jetzt abändern...
Ach so rum war es... dann war das XML nicht fehlerhaft, sondern ein Konsument davon hatte einen fehlerhaften Parsing-Code!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Oh doch sicher schon :D
Ich rede ja von "fehlerhaft" nicht von fehlerhaft... :D

Das Programm das ich benutzt habe ich ja nichts produziert sondern nur eingelesen...
Der Parsing Code war ansicht auch nicht fehlerhalt. Es hat sich um ein proprietäres Parsing gehandelt...
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Killigen: wenn etwas proprietär ist, kann es nicht fehlerhaft sein???? Deine Logik möchte ich verstehen. Oder stand im Kleingedruckten "wir parsen kein XML, wer's dennoch versucht ist selbst schuld."?
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Was hat das damit zu tun? Prioprietär heißt nur, dass es sich um eine herstellerspezifische Software handelt, die auch nur ein proprietäres xml- Format verarbeiten kann...
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

es gibt kein proprietäres xml-Format! Es gibt nur ein vom w3c spezifiziertes xml-Format. Wer also behauptet, xml lesen zu können, aber es nicht kann, täuscht seine Kunden, liefert ein fehlerhaftes Produkt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben:es gibt kein proprietäres xml-Format! Es gibt nur ein vom w3c spezifiziertes xml-Format. Wer also behauptet, xml lesen zu können, aber es nicht kann, täuscht seine Kunden, liefert ein fehlerhaftes Produkt.
+1 :D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Es gibt schon prorietäres xml-Format...
Es wird grundstätzlich xml verwendet, welches aber an einigen Stellen leicht abgeändert ist, um das bearbeiten der Dokumente durch Scripte zu erschweren bzw. unmöglich zu machen.
Das "verpflichtet" Firmen die auf solche Tool angewiesen sind teure Lizenzgebüren zu zahlen... Sowas nennt sich Marketing -.-
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Killigen: prorietäres xml-Format könnte man z.B. die Office-XML-Formate von Microsoft nennen, die zwar gültiges XML sind, aber darübergestülpt noch ihr eigenes Format haben. Das ist aber trotzdem gültiges XML. Kein kaputtes XML. Das ist der entscheidende Unterschied. Kaputtes XML darf man nicht XML nennen.
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

@Sirius: Was bitte verstehst du genau unter darübergestülpt?

Das ist auch gültiges xml- Format nur dass es zum Beispiel attr='2' nicht lesen kann (bzw. aus Marketingsicht nicht will) attr="2" aber schon.

Wenn ich deiner Interpretation von darübergestülpt folge, ist das genau das gleiche...

Es wird auch die Arbeit mit gewissen Dateien - durch andere Programme - durch Reglementierung erschwert bzw. verhindert...
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Sirius3: Denk an dein Herz... ;)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Killigen:
Da sich jmd. ersthaft XML genommen, die Syntax so abgewandelt, dass jeder standardkonforme XML-Parser aufgibt - nur um die Verarbeitung der Daten zu erschweren? Da hat jmd. zuviel Zeit/Geld resp. gelangweilte Entwickler, mit einem eigenen Binärformat ist man da doch 1000x schneller am fragwürdigen Ziel. :roll:
Wobei die single-quote-Sache ja erlaubt ist (siehe http://www.w3.org/TR/xml/#NT-AttValue). Welche Abweichungen vom Standard sind denn so drin?
Antworten