Format in einer XML anpassen

shreecy

Lt. Junior Grade
Registriert
Sep. 2012
Beiträge
284
Hallo liebe CB Gemeinde,

Es gibt ein XML File, dort finden sich um die 250 Einträge im folgenden Format:

<item context="active" type="colleagues">
<name>AHE Max Mustermann</name>
<number>1310</number>
</item>

Es handelt sich hierbei um Telefonbuch File für Telefone.
Nun würde aber folgendes benötigt werden:

<item context="active" type="" fav="false" mod="true" index="0">
<name>AHE</name>
<number>1332</number>
<number_type>sip</number_type>
<first_name>Max</first_name>
<last_name>Mustermann</last_name>
<group>colleague</group>
</item>

Hat hier jemand eine Idee , wie da am besten automatisch realisiert werden könnte,
ohne das man die Datei händisch bearbeiten muss ?
Ich hab mich schon ein bisschen in XSLT eingelesen, allerdings sind die meisten Beispiele dafür HTML-Anzeige für Websites.
Ziel wäre das Ganze in einen Cron Job bzw. Aufgabenplanung zu schmeißen, das Grundfile wird täglich automatisch erstellt.
Allerdings wäre ein Möglichkeit, das Ganze einmalig Händisch zu machen schon super!

Vielen dank schonmal für die Hilfe!
LG
Shreecy
 
mit hilfe von c++ und boost würde die lösung keine 10 minuten für die umsetzung des konvertierungstools brauchen. du beherrschst sie technologien nicht zufällig? bräuchtest auf jedenfall einen xml-parser und reguläre ausdrücke, um deine xml einzulesen und den "AHE" prefix vom namen abzutrennen.
 
Leider nein,
Programmiertechnisch habe ich zwar etwas Grundwissen,
allerdings ist das auch schon etwas länger her .. leider :freak:
 
Xile schrieb:
Nur wenn man mit der Version 2.0 arbeiten kann, was oft nicht geht weil Drittanbieter.
Außerdem ist XLS nicht gerade Einstiegsfreundlich^^

XSL sollte man nutzen wenn man Daten transformiert, möglichst ohne diese Ändern zu müssen weil bis Version 2.0 dies nur sehr Umständlich ist.

Code:
<item context="active" type="colleagues">
<name>AHE Max Mustermann</name>
<number>1310</number>
</item>

Besteht der Name immer aus 3 Teilen? Oder auch mal 2?
Generell mit PHP in wenigen Minuten automatisierbar....
Selbst mit JS geht das (Ausgabe Copy Paste -> Fin!).

Mit jQuery das XML String durchiterieren und die Werte die du benötigst rausholen.
Neues XML mit diesen Werten generieren und ausgeben (speichern geht schlecht mit JS).
 
Zuletzt bearbeitet:
[GP] mino schrieb:
mit hilfe von c++ und boost würde die lösung keine 10 minuten für die umsetzung des konvertierungstools brauchen.
Warum wirfst du jetzt 2 beliebige Namen in den Raum? Genau so gut könnte man jede andere Technologie nennen.

Das ist eben eine Arbeit für einen Programmierer. Die Lösung würde abstrakt so aussehen:

Code:
Read XML file "file" as tree t
  For each node "item" i in t
    i.attributeList.addAttribute {fav="xyz", mod="123", etc.}
    i.addChildNode {bla="xyz", fasel="123", boink="narf"}
End

Fertig.

Was für eine Programmiersprache man da nimmt ist völlig egal. Python, Java, C#, ausgerechnet C++ würd ich jetzt nicht unbedingt nehmen, da es wohl offensichtlich nicht performancekritisch ist.
 
Zuletzt bearbeitet:
du hast vergessen noch perl aufzuführen :) habe gefragt, weil ich ihm sonst ein snippet für die lösung gegeben hätte. schau dir mal nochmal genauer die vorher und nachher XML an, geht nicht nur ums hinzufügen neuer knoten.
 
OK: Perl, Assembler, Brainfuck, Visual Basic, PHP, eine turing-mächtige Variante von CSS3, TypoScript, FORTRAN, Whitespace, Chef, JavaScript, Haskell, Erlang, OCAML, ABAP, Malbolge oder auch Lisp.

Wichtig wäre nur, dass man für die verwendete Programmiersprache eine Library zum Einlesen von XML Dateien hat, sonst sind es nicht 20 Zeilen Code am Ende, sondern 2000. Für Malbolge existiert dies möglicherweise nicht.
 
mit Perl geht das mit Bordmitteln in (fast ;) ) einer Zeile

aber generell müsste man eben wissen, was auf dem System direkt zur Verfügung steht, um ne entsprechende Lösung zu empfehlen...
 
Zuletzt bearbeitet:
shreecy schrieb:
<name>AHE Max Mustermann</name>
automatisiert zu
<name>AHE</name>
<first_name>Max</first_name>
<last_name>Mustermann</last_name>
umwandeln? Das klappt nicht mit Sicherheit.

Stell dir mal folgende Namen vor "Carl Maria von Weber", "Klaus Maria Brandauer" oder noch schlimmer "Caspar David Friedrich" (sieht aus wie 3 Vornamen). Wie willst du hier programmatisch den Vornamen feststellen? Oder was ist mit asiatischen Namen? Da wirf oft (aber nicht immer) der Familienname zuerst geschrieben (z.B. "Kim Il-Sung"). Und was ist mit Personen, die nur einen Namen haben? Gibt es ebenfalls...

Namenslisten müssen vorher schon sauber angelegt sein... und die einzig korrekte Version ist hier immer: Ein Feld für den gesamten Namen.
 
Das erinnert mich an die Aufgabe Straße von Hausnummer zu trennen.
Gleiche Problematik^^
 
Daaron das sehe ich absolut nicht so. Aber ich nehme mal an, die Antwort war als Aprilscherz gedacht.
 
Nein, Chaoz hat ja auch ein schönes Beispiel gebracht mit Straße + Hausnummer... Nicht immer hat ein Haus eine Hausnummer.

Aber wenn du denkst, ich scherze... Denken wir mal an die endgeile alte Serie M*A*S*H, genauer an Major Charles Emerson Winchester III. Wie willst du diesen Namen in ein <vorname><name> - Schema bringen? Nur das letzte Segment als Nachname behandeln? Das wäre dann "IIII", also "der Dritte". Fehlschlag.

Oh, und der absolute Bringer, der jegliche Erkennungsroutine killt:
Karl-Theodor Maria Nikolaus Johann Jacob Philipp Franz Joseph Sylvester Freiherr von und zu Guttenberg
 
Dann braucht man halt eine handvoll Regeln. Ein Algorithmus ist genau so mächtig wie ein Mensch, der es manuell eintippt, daher kann man ohne weiteres behaupten: Wenn man es nicht automatisieren kann, dann kann es auch ein Mensch nicht und es ist schlicht unklar.

Daten sollten atomar (Erste Normalform) sein, daher ist das ideale Speicherfeld für Namen, Adressen, etc. sicher nicht alles zusammen in einem Feld. Dann kommt es nämlich bei Konvertierungen genau zu diesem Problem.

Was ist zB, wenn du für die Datenbank einen Newsletter rausschicken willst, und die Geschäftsleitung gibt als Vorgabe, der Newsletter soll mit "Sehr geehrte/r Herr/Frau <NACHNAME>" beginnen, dann kannst du es nicht umsetzen.
 
Zuletzt bearbeitet:
Dann müssen die Namen direkt in 2 Feldern erfasst werden. Nachträgliches umwandeln wird nie 100% zuverlässig funktionieren
 
F_GXdx schrieb:
Dann braucht man halt eine handvoll Regeln. Ein Algorithmus ist genau so mächtig wie ein Mensch, der es manuell eintippt, daher kann man ohne weiteres behaupten: Wenn man es nicht automatisieren kann, dann kann es auch ein Mensch nicht und es ist schlicht unklar.

Daten sollten atomar (Erste Normalform) sein, daher ist das ideale Speicherfeld für Namen, Adressen, etc. sicher nicht alles zusammen in einem Feld. Dann kommt es nämlich bei Konvertierungen genau zu diesem Problem.
Es gibt auch Fälle da kommt man nicht drum herum nur ein Feld anzubieten.

Wenn du einen DE und FR online shop betreibst wirst du merken dass die Franzosen Straße + Hausnummer in einem Feld eintragen. Deutsche haben 2 Felder dafür.
Ein Franzose kommt nicht klar mit 2 Feldern^^ das merkt man dass die CR drastisch fällt wenn man 2 Felder einführt.

Nun stehst du vor dem Problem die Daten ordentlich in die DB zu übertragen.
In DE kein Problem. In FR muss man den String an der richtigen Position zerteilen.
- Berliner Allee 15
- Wiener Straße 1/2a-3a/4
- Mozartplatz 3a
- Alte Ricklinger Straße 59-61
- Wiener Straße 1/2
- Markt 16B1
- Straße des 17. Juni 28

Ist nur eine Handvoll Beispiele für die verschiedensten Schreibweisen einer Straße + Hausnummer.
In AT hast du zusätzlich noch "Stieg" nach der Hausnummer gefolgt von einer Zahl.

Irgendwann wird eine 100ige korrekte Trennung nicht möglich sein.
Der Mensch hingegen wird es weiterhin trennen können...
 
F_GXdx schrieb:
Dann braucht man halt eine handvoll Regeln. Ein Algorithmus ist genau so mächtig wie ein Mensch, der es manuell eintippt, daher kann man ohne weiteres behaupten: Wenn man es nicht automatisieren kann, dann kann es auch ein Mensch nicht und es ist schlicht unklar.
Menschen beherrschen etwas, dass Computern abgeht: Common Sense Knowledge (bzw Logic).
Wenn eine Maschine Common Sense beherrscht, DANN hast du erfolgreich eine starke KI erschaffen.

Daten sollten atomar (Erste Normalform) sein, daher ist das ideale Speicherfeld für Namen, Adressen, etc. sicher nicht alles zusammen in einem Feld. Dann kommt es nämlich bei Konvertierungen genau zu diesem Problem.
Nochmal: Was ist bei der asiatischen Schreibweise der Vorname? Was trägst du wo ein? Was ist mit Personen, die sich nur über ihren (im Perso eingetragenen) Künstlernamen identifizieren, wie es ihr gutes Recht ist? Was machst du, wenn selbiger Künstlername nur aus EINEM Wort besteht, wie z.B. bei "Prince"?

Normalform hin oder her, Praktikabilität > Normierung. Praktikabel isT: Der USER entscheidet, wie er seinen Namen angibt.

Was ist zB, wenn du für die Datenbank einen Newsletter rausschicken willst, und die Geschäftsleitung gibt als Vorgabe, der Newsletter soll mit "Sehr geehrte/r Herr/Frau <NACHNAME>" beginnen, dann kannst du es nicht umsetzen.
Dann löst du das Problem bereits da, wo es entsteht: bei der Registrierung des Newsletters. Oder du sagst der Geschäftsleitung klipp und klar: das ist nicht praktikabel, lass uns lieber "Sehr geehrte/r <NAME>" verwenden.
 
[ChAoZ] schrieb:
Der Mensch hingegen wird es weiterhin trennen können...
Ich schick dir mal jemanden von meiner örtlichen Hauptschule vorbei, dann geben wir ihm einen Datensatz, sagen ihm abstrakt was er damit tun soll, und schauen es uns am Ende an. Damit wäre diese Theorie dann wahrscheinlich widerlegt...

Daaron schrieb:
Menschen beherrschen etwas, dass Computern abgeht
Das sehe ich nicht so.

Daaron schrieb:
Nochmal: Was ist bei der asiatischen Schreibweise der Vorname?
Der Vorname ist der Vorname, ich sehe das Problem nicht, nur weil die Reihenfolge vielleicht anders ist. Du verwechselst den Präsentations-Layer mit dem Persistenz-Layer.

Daaron schrieb:
Was machst du, wenn selbiger Künstlername nur aus EINEM Wort besteht, wie z.B. bei "Prince"?
Dann erlaube ich eben auch Emtpy String als Eingabe und Prince wird zu: Vorname="", Nachname="Prince" oder was auch immer.

Daaron schrieb:
Oder du sagst der Geschäftsleitung klipp und klar: das ist nicht praktikabel
Tolle Wurst, hätten sie einen vernünftigen Informatiker, wäre es aber praktikabel.

[QUOTE='[ChAoZ]Ein Franzose kommt nicht klar mit 2 Feldern^^[/QUOTE]
Ich hab das grad gecheckt bei einigen Französischen Seiten und du hast Recht. Das verwundert mich.
 
Zuletzt bearbeitet:
F_GXdx schrieb:
Ich schick dir mal jemanden von meiner örtlichen Hauptschule vorbei, dann geben wir ihm einen Datensatz, sagen ihm abstrakt was er damit tun soll, und schauen es uns am Ende an. Damit wäre diese Theorie dann wahrscheinlich widerlegt...
Einen DAU etwa? :D

Was ist dein Beruf wenn ich fragen darf?
 

Ähnliche Themen

Zurück
Oben