Und daraus haett' ich gerne "automatisch", also irgendwie per Software
erstellt:
ein / mehrere c-files mit Dummyfunktionen - also sowas wie z.B.
1
voidget_status_version(char*version){
2
//blafasel
3
}
4
voidget_config_rwval1(char*rwval1){
5
//blafasel
6
}
7
voidset_config_rwval1(char*rwval1){
8
//blafasel
9
}
10
....
11
voidget_config_subdir_rwval3(char*rwval3){
12
//blafasel
13
}
weiterhin entsprechend eine snmp-mib
(und weiterhin vielleicht noch irgendwas fancy, was ich noch nicht
weiss).
Ich spreche C, div. Assembler und etwas VHDL.
Da scheint mir keine dieser Sprachen dafuer besonders gut geeignet zu
sein, um aus dem XML die entsprechenden anderen Files zu generieren.
Ich vermute mal, sowas koennte ich mit Perl, Python, xslt oder so
basteln (wenn ich's koennte ;-) ).
Was fuer ne Sprache empfehlen denn Experten fuer sowas?
Gruss
WK
Die Regel ist also alles unter Status bekommt nur eine GET und die unter
config beides?
Datentyp immer char*?
In Python bekommst du das mit ein paar Zeilen hin. JSON ist da easy. Für
XML gibt's da aber auch Libs.
Moin,
N. M. schrieb:> Die Regel ist also alles unter Status bekommt nur eine GET und die> unter> config beides?> Datentyp immer char*?
Erstmal 2x Ja. Ich wollt' das Beispiel jetzt nicht gleich ueberfrachten.
Aber wahrscheinlich werden diverse weitere Regeln im Lauf der Zeit
zweckmaessig werden.
> In Python bekommst du das mit ein paar Zeilen hin. JSON ist da easy. Für> XML gibt's da aber auch Libs.
Ob JSON oder XML als "source" waere mir auch erstmal wurscht. Ist bei
mir alles noch im fruehen Hirnfurz-Stadium. Also ist JSON eher geeignet
fuer parsing mit Python als XML?
Gruss
WK
Dergute W. schrieb:> Also ist JSON eher geeignet fuer parsing mit Python als XML?
Ich meine das JSON von Haus aus mitkommt für komfortables arbeiten mit
XML sich eine externe Lib empfiehlt.
Bin noch relativ frisch was Python angeht.
Versuche aber immer wieder etwas damit zu spielen.
Man möge mich korrigieren falls es da besseres gibt (bitte mit Angabe
was).
Ich hab das gerade mal kurz ausprobiert (siehe Anhang).
Macht eigentlich das was du gesagt hast.
Jemand wo sich mit Python auskennt macht das bestimmt eleganter, aber es
tut.
Moin,
N. M. schrieb:> Ich hab das gerade mal kurz ausprobiert (siehe Anhang).
Sehr schick, merci vielmals!
Dat geht ja sogar fast auf Anhieb (musste bloss gschwind xmltodict
installieren).
Bin schwer impraegniert :-)
Franko S. schrieb:> Dergute W. schrieb:>> Was fuer ne Sprache empfehlen denn Experten fuer sowas?> XSLT
Koennt ich dich oder wen anderes XSLT-sprechenden erfolgreich um ein
Stueckchen src anschnorren?
Gruss
WK
Dergute W. schrieb:> Sehr schick, merci vielmals!
Kein Problem. War nicht viel Arbeit.
Dergute W. schrieb:> musste bloss gschwind xmltodict installieren
Ja das ist das was ich meinte :-)
JSON kommt glaube ich so mit.
Dergute W. schrieb:> Bin schwer impraegniert :-)
Ist bei dem Wetter nicht verkehrt.
Dergute W. schrieb:> Koennt ich dich oder wen anderes XSLT-sprechenden erfolgreich um ein> Stueckchen src anschnorren?
nein, ist aufwendiger als json. Lohnt sich nur wenn man "komplexere"
Strukturen hat. Der Vorteil ist halt dass man xml als Quelle hat dieses
verfizieren kann, dazu musst du aber noch ein Schema oder dtd
definieren.
Das lohnt sich aber erst ab einer gewissen "Kompliziertheit" deiner
xml-Struktur und irgendwie ist xml eh pain in the ass.
Oder man baut sich ne DSL, z.B. mit ANTLR oder nimmt groovy da kann man
sehr Elegant in der Sprache selber rumwerkeln. gradle ist ein bsp. wie
das so gemacht wurde aber die gehen afaik inzw. auch weg von diesem
Ansatz.
Lohnt aber auch erst ab einer gewissen Komplexität und wenn man da was
"dauerhaftes" baut das man evt. ausbauen will, ausser man hat sowas
schon mal gemacht und kennt groovy gut genug dann ist das sehr easy und
elegant, imo.
Aber bleib besser erst mal bei json wenn das reicht.
Dergute W. schrieb:> Gegeben ist ein xml-file, z.b. sowas von dem Kaliber hier:
Das ist aber eher maximal keinkalibrig.
Dergute W. schrieb:> weiterhin vielleicht noch irgendwas fancy, was ich noch nicht> weiss
Weißt Du überhaupt schon, welches Problem Du zu lösen beabsichtigst oder
bist noch mitten im Problem(er)findungs-Brainstorming?
> Ich spreche C, div. Assembler und etwas VHDL.> Da scheint mir keine dieser Sprachen dafuer besonders> gut geeignet zu sein, um aus dem XML die entsprechenden> anderen Files zu generieren.
Da hast Du sicherlich recht, allerdings gibts wohl zumindest für/in C
libs zum XML-Parsen wie Sand am Meer; solange also die Komplexität in
der Größenordnung Deines Beispiels bleibt, sollte das größte Problem
dabei die Auswahl der passendsten XML-lib sein.
> Ich vermute mal, sowas koennte ich mit Perl, Python,> xslt oder so basteln (wenn ich's koennte ;-) ).> Was fuer ne Sprache empfehlen denn Experten fuer sowas?
XSLT wurde genau dafür erfunden; insofern liegst Du da sicher richtig.
Perl, Python usw. sind ähnlich wie C einfach allgemeine
Programmiersprachen in denen sich eigentlich eh fast alles machen läßt.
Dergute W. schrieb:> Koennt ich dich oder wen anderes XSLT-sprechenden> erfolgreich um ein Stueckchen src anschnorren?
Sorry, bin da über ein rudimentäres Radebrechen nie wirklich
rausgekommen und auch das ist bald 1/4 Jahrhundert her; was mir noch in
Erinnerung ist, war die Grundidee aber genau das was Du suchst, aus ein
und derselben XML-Quelldatei je nach Bedarf z.B. eine HTML, PDF, PS,
etc. Repräsentation zu erzeugen. Aber so wirklich Sinn macht das ganze
halt erst bei deutlich komplexeren Aufgabenstellungen als in Deinem
Beispiel.
Moin,
Franko S. schrieb:> Lohnt sich nur wenn man "komplexere"> Strukturen hat.Franko S. schrieb:> Das lohnt sich aber erst ab einer gewissen "Kompliziertheit" deiner> xml-Struktur
Jaaaaa...
Nun ist es aber auch so, dass es ja (nicht nur) hier nicht so
wohlgelitten ist, wenn man eine komplette Software mit z.b. 100000LOC
hier anpappt und fragt, warum dann malloc() in Zeile 4242 des Programms
nach einer Weile nicht mehr geht.
Warum sollte ein Beispiel unnoetig komplex und aufgeblasen sein, wenn's
auch in simpler geht, die Problematik zu erklaeren?
Koennte natuerlich auch sein, dass ich zu doof bin zu erkennen, dass
fuer eine Handvoll Funktionen sich so ein Aufriss nicht lohnt.
Nee - ist aber nicht so.
Michi S. schrieb:> Perl, Python usw. sind ähnlich wie C einfach allgemeine> Programmiersprachen in denen sich eigentlich eh fast alles machen läßt.
Ja, so wie ich mir auch meine Hose mit einer Beisszange anziehen kann
oder mit einem Buegeleisen eine Scheibe Leberkaes' braten. Geht auch
alles, weil das universelle Werkzeuge sind...
An dieser Stelle: Danke nochmal fuer das Pythonbeispiel.
Gruss
WK
Dergute W. schrieb:> Was fuer ne Sprache empfehlen denn Experten fuer sowas?
Sowas am besten gar nicht selber programmieren, sondern von einer KI
machen lassen.
Ich nutze ein paar Zeilen Python-Code um größere Mengen C-Code aus
Excel-Dateien zu generieren.
Aber natürlich kann man auch .xml als Input nutzen, ist sogar einfacher.
XSLT wurde auh schon genannt, aber das ist für dein simples Problem eher
aufwendig.
Moin,
Johnny B. schrieb:> Dergute W. schrieb:>> Was fuer ne Sprache empfehlen denn Experten fuer sowas?>> Sowas am besten gar nicht selber programmieren, sondern von einer KI> machen lassen.
Fuer die Einen ist es Selbstverstaendlich, fuer Andere die duennste
Salamischeibe der Welt: Ich moechte das mit moeglichst wenig Aufriss,
aus einem Makefile heraus machen. Und ich moechte mir nicht
Multi-Gigabyte von Bloat oder gar Internetzugang als Abhaengigkeit fuer
so einen Quark einfangen.
Gruss
WK
Michi S. schrieb:> allerdings gibts wohl zumindest für/in C libs zum XML-Parsen wie Sand am> Meer; solange also die Komplexität in der Größenordnung Deines Beispiels> bleibt, sollte das größte Problem dabei die Auswahl der passendsten XML-lib> sein.
Es gibt auch sehr komfortable .NET-Bibliotheken dafür. Nicht nur zum
Parsen, sondern auch zum Generieren und Modifizieren von XML-Dateien.
C# lernt man als C-Programmierer ruckzuck, und wenn man erstmal gemerkt
hat, wie bequem es ist, wenn man nicht überlegen muss, wann man was wo
in den Heap schreibt und wo welcher Pointer hinzeigt, will man gar nicht
mehr von C# weg.
Klar, C# frisst Speicher und Rechenzeit und läuft nur auf einem PC
(nicht auf einem µP), aber das spielt vermutlich hier gar keine Rolle.
Rolf schrieb:> Es gibt auch sehr komfortable .NET-Bibliotheken dafür. Nicht nur zum> Parsen, sondern auch zum Generieren und Modifizieren von XML-Dateien.
Es gibt sogar Tools die das ganz ohne eine explizite Sprache können.
Das ruft man dann in einem bashscript auf und muss sich nicht mal mit C#
rumplagen.
N. M. schrieb:> Jemand wo sich mit Python auskennt macht das bestimmt eleganter, aber es> tut.
Ich habe mir mal die Freiheit genommen dein Python Programm etwas
anzupassen. Da du schreibst das du Python Anfänger bist, dachte ich das
es vielleicht hilfreich ist.
1.) du solltest unterhalb von "if _name_ == '__main__':" nur eine main
Funktion rufen und keinen Code schreiben, das ist eine Konvention unter
Python Entwicklern, hauptsächlich weil du sonst den Code nicht testen
kannst.
2.) trav_Dict sollte keine Funktion, sondern ein Generator sein, das
spart Arbeitsspeicher. Außerdem gibt es in Python die Konvention, dass
Funktionen/Methoden nicht im Camelcase geschrieben werden, sondern durch
ein underline trennen du hast beides gemacht. Solltest du bei trav_Dict
auf dem Rückgabewert Liste bestehen, würde ich dir raten die listen mit
extend und nicht mit Plus zu verketteten. Variablen werden übrings auch
immer, in Python komplett kleingeschrieben.
3.) das du in der Main erst teste, ob das XML existiert, ist eher
unüblich bei Python Entwicklern. Python ist Stolz drauf das Exceptions
leichtgewichtig sind, daher hat sich bei Python das "It is easier to ask
forgiveness than it is to get permission" – Prinzip durchgesetzt und man
verucht einfach die Datei zu öffnen, Wenn nicht gibt es halt eine
Exception, welche man aufräumen kann.
4.) das os.path Module wird als veraltete angesehen und sollte, wo immer
möglich durch ein Path Objekt aus der Pathlib ersetzt werden.
5.) Variablen Namen sollten sprechend sein, die Namen obj oder d sind es
nicht. Generell empfehle ich dir Variablen zu verwenden, welche
mindestens 3 Zeichen enthalten, ansonsten ist es Krampf die zu suchen
und ersetzen. Generell gilt das jedes Programm öfter gelesen als
Geschieben wird, daher sollte man auf Lesbarkeit optimieren. Sprechende
variable Namen sind da ein einfaches Mittel, das Verständnis zu fördern.
6.) Fehlermeldungen solltest du nach sys.stderr schreiben und nicht nach
sys.stdout, das kannst du erreichen, indem du beim print den
File-Parameter angibst.
7.) das Suchen nach "status" und "config" ist defacto so ähnlich, dass
es sich lohnt hierfür eine Funktion zu schreiben, um das dry-Prinzip
einzuhalten.
Moin,
Merci auch fuer das 2. Pythonprogramm. Sieht fuer mich als Laien etwas
C++iger aus als das erste (wahrscheinlich weil "try" drinnen vorkommt)
:-)
Aber soweit ist schon klar: Meinereiner schaut aeusserst interessiert in
das Uhrwerk (oink oink).
Bei flex/Bison frag' ich mich, ob die nicht dann gut waeren, wenn es
noch keine Parser fuer xml geben wuerde. Da es die aber gibt, haette ich
jetzt erstmal nicht aufm Schirm gehabt.
Gruss
WK
Oliver schrieb:> Ich habe mir mal die Freiheit genommen dein Python Programm etwas> anzupassen. Da du schreibst das du Python Anfänger bist, dachte ich das> es vielleicht hilfreich ist.
Super. Vielen Dank. Ich versuche das Mal nachzuvollziehen.
In manche Dinge wie Konventionen, Verwendung von alten Bibliotheken usw.
muss man halt nach und nach hinein wachsen. Gerade Schreibweise und
Länge von Variablen- und Funktionsnamen ist selbst innerhalb einer
Sprache eine Religionssache :-)