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?
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?
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 :-)
Momentan tendiere ich ein wenig Richtung json statt xml. Und doch eher c statt Python. Auch wenn c code, der c code erzeugt eigenartig aussieht ;-)
Ich papps mal hier an, damit's nicht verschuett geht.
Schon gleich wollte ich es selber programmieren als Auffrischung von XSLT, hab dann aber doch den ChatGPT einmal probiert und hat sogar funktioniert. Normalerweise lässt er mich im Stich.
Die XML-Datei einfach im Browser öffnen, dann wird mit der XSLT daraus die C-Version gemacht.