XML-String analysieren

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
EntonH
User
Beiträge: 8
Registriert: Mittwoch 20. Februar 2008, 10:32

Hallo,

ich bekomme über eine Funktion, die eine CORBA-Schnittstelle benutzt bisher nur Werte zurück, die immer zu einem BAD_TYPECODE-Fehler führen. Daher habe ich mir überlegt, als Rückgabewert einen String zu verwenden, der wiederum eine Struktur analog XML enthält:

Code: Alles auswählen

<object>
    <objecttype>double</objecttype>
    <length>2</length>
    <element>
        <type>double</type>
        <value>35.4</value>
    </element>
    <element>
        <type>double</type>
        <value>54</value>
    </element>
<object>
Ist es in Python möglich so einen String zu parsen, dass ich beide Einträge unter "Value" der beiden Elemente zurückgeliefert bekomme?

Viele Grüße
EntonH[/quote]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Klar! Schau Dir mal die Lib lxmlan! Per XPath-Query sind das nur wenige Zeilen Code.
BlackJack

@EntonH: Warum ist das XML so aufgeblasen, wenn Du eh nur zwei Zahlen bekommen willst? Die lassen sich als Zeichenkette auch einfacher übertragen, zum Beispiel einfach '35.4 54'.

Du könntest natürlich auch den Fehler suchen und beseitigen, der zu dieser Notlösung geführt hat.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

@Hyperion:
Warum nicht ein Modul aus der Standard-Lib?
http://docs.python.org/library/markup.html

@BlackJack
Zum Ausschluss von Fehlern ist die Verwendung von einem eigenen Protokoll bei Raw Socket Komm. eigentlich immer sinnvoll.
Und in diesem Fall ist es ja fast das gleiche. Würde das schon so machen. Ist ja auch kein Problem, das zu parsen.
BlackJack

@ice2k3: Wo ist hier von Socket-Kommunikation die Rede? Und wo ist das XML da ein "Protokoll"? Welcher Fehler wird dadurch ausgeschlossen? Es ist auch komplizierter zu Parsen als zwei Zahlendarstellungen in einer Zeichenkette. Und letztendlich: Warum ist diese Notlösung überhaupt notwendig? Man kann mit CORBA soweit ich weiss auch zusammengesetzte Werte zurückgeben. Das sieht alles nach einem Hack aus.
EntonH
User
Beiträge: 8
Registriert: Mittwoch 20. Februar 2008, 10:32

Soweit ich mich recht erinnere, kommt der BAD_TYPECODE-Fehler von der CORBA-Schnittstelle hoch, weil es für den von der Serverseite zurückgegebenen Wert kein "normales" Pendant in Python gibt. Die Struktur der zurückgelieferten Werte ist ebenso nicht eindeutig feststellbar. Daher fiel eine Definition in der IDL ebenso wenig erfolgreich aus. Nur wegen dieser Schwierigkeit, dass ich in der IDL keine adäquate Struktur zusammenbasteln kann, fiel mir dies als günstigste Alternative ein.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Wenn er reine Strings übermittelt, ist das im Prinzip das selbe wie eine reine Socket-Kommunikation.
Und von einem Protokoll kann man schon sprechen, wenn man nur festlegt, wie eine Nachricht - in diesem Fall halt der String - formatiert ist.

Auch kann man im Prinzip einen String wie du vorgeschlagen hast ('35.4 54') schon als Protokoll betrachten, allerdings ist diese Formatierung viel fehleranfälliger wie ein Protokoll in XML Struktur.

XML-basierte Nachrichten sind eben typisch für TCP/IP (wie z.B. XHTML, XML-RPC,...), deswegen würde ich so eine Formatierung klar bevorzugen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

ice2k3 hat geschrieben:@Hyperion:
Warum nicht ein Modul aus der Standard-Lib?
http://docs.python.org/library/markup.html
Weil die eben keine XPath und CSS-Selektor Unterstützung bieten! Ansonsten ist ElementTree sichelrich auch eine Option.
BlackJack

@ice2k3: Zeichenketten *so komfortabel* übermitteln ist keine Socket-Programmierung. Socket-Programmierung ist wesentlich mehr Low-Level und umständlich.

Und ich verstehe immer noch nicht was es bringen soll das so umständlich und aufgeblasen in XML zu verpacken. Du redest schon wieder von Fehleranfälligkeit -- ohne zu sagen was Du damit überhaupt meinst!?

Das Format alleine macht auch noch kein Protokoll aus. Genau so wenig sind XML-basierte Nachrichten typisch für TCP/IP. Es gibt auch haufenweise Protokolle und Formate, die nicht auf XML setzen und über TCP/IP laufen. Zum Beispiel CORBA. Und da dann XML *so* einzubetten finde ich ehrlich gesagt ein bisschen pervers.

@EntonH: Was heisst kein "normales" Pendant in Python!? Die Abbildung der CORBA-Datentypen ist für Python standardisiert.
Antworten