Forum: PC-Programmierung Womit XML parsen


von McFly (Gast)


Lesenswert?

Hi,
ich check das nicht. Wie kann man am besten aus einer XML-Datei Daten 
auslesen und damit eine neue XML-Datei generieren? Es gibt da so Sachen 
wie JSON, DCOM etc., aber bis man das verstanden hat...Puhh. Was sollte 
man nehmen? C# bietet ja auch einiges an, aber gehts nicht etwas 
gehirngerechter ?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Falls du ein XSD für input/output hast kannst du dir für Java mittels 
des XJC Tools (ab Java 1.5 standardmäßig enthalten) Klassen erzeugen 
lassen welche die das Parsen abnehmen und kannst dann einfach 
"umkopieren" und automatisch als XML ausgeben lassen.

Ansonsten ist halt die frage was "hirngerecht" angeht, wenn du etwas 
haben willst das viel Denkarbeit erfordert wäre z.B. XSLT das Mittel der 
Wahl.

von Parser (Gast)


Lesenswert?

Was willst du denn ungefähr machen? Mit deiner derzeitigen Angabe kann 
man dir alles und nichts empfehlen.

Schön geht es mit XSL(T). Ist aber meiner Meinung nach nur für einfache 
XML-Transformationen geeignet, weil es schnell recht komplex wird. Musst 
du dich halt auch ein bisschen einarbeiten - für eine einfache Sache 
wird es gehen, wird aber dann schnell schwieriger.

von Verwirrter Anfänger (Gast)


Lesenswert?

Zusätzlich zu der Frage, was du machen willst, vielleicht auch noch, was 
du bisher kannst.
Mit XSLT geht das ganz ohne "richtiges" Programmieren, und ansonsten 
haben so ziemlich alle moderenen Programmiersprachen erweiterungen für 
XML. Neben C# gingen auch Python, Java, PHP, Perl und bestimmt auch C++ 
und viele andere Sprachen, die in den letzten 15 Jahren weiterentwickelt 
wurden. Wenn du es ganz pervers machen willst, sollte das auch rein in 
Javascript gehen. Da müsstest du nichtmal einen extra Interpreter / 
Compiler installieren.

von McFly (Gast)


Lesenswert?

Verwirrter Anfänger schrieb:
> Mit XSLT geht das ganz ohne "richtiges" Programmieren

Ist das eine Art XSLT mit grafischem Mapping und welches Tool kann das?

von Arc N. (arc)


Lesenswert?

McFly schrieb:
> Verwirrter Anfänger schrieb:
>> Mit XSLT geht das ganz ohne "richtiges" Programmieren
>
> Ist das eine Art XSLT mit grafischem Mapping und welches Tool kann das?

Um etwas mehr Verwirrung zu stiften XSLT ist Turing-vollständig (könnte 
alles berechnen, was man normalerweise mit dafür geeigneteren Sprachen 
machen würde) http://www.unidex.com/turing/utm.htm

C#
http://msdn.microsoft.com/en-us/library/bb675186(VS.90).aspx
oder man nutzt LINQ statt XSLT
http://www.infoq.com/news/2007/07/LINQ-and-XSLT
wenn's besser "passt"

von Rolf Magnus (Gast)


Lesenswert?

Arc Net schrieb:
> Turing-vollständig (könnte alles berechnen, was man normalerweise mit dafür
> geeigneteren Sprachen machen würde)

Coole Definition für Turing-Vollständigkeit ;-)

von Claus H. (Firma: 🪄 Hokuspokus 🪄) (hottab) Benutzerseite


Lesenswert?

Hi McFly,

hier kommt ein steinaltes Beispiel die XML-Daten mit dBASE IV 2.0 zu 
extrahieren.

http://u880.bplaced.net/merxml1a.prg.txt

Das Tool war schnell erstellt, um nach einer Systemumstellung die Daten 
zu verarbeiten.

Es geht nur um das hoffentlich leicht verständliche Prinzip, das mit 
jeder Programmiersprache möglich ist. Später haben wir den PHP-Parser 
eingesetzt oder PDF's zu Text --> Daten konvertiert.

von McFly (Gast)


Lesenswert?

gibts irgendwo einen allgemeingültigen Algorithmus mit Bild?

von Arc N. (arc)


Lesenswert?

McFly schrieb:
> gibts irgendwo einen allgemeingültigen Algorithmus mit Bild?

Wie soll das gehen? In einem stehen bspw. Längen in Seemeilen, im 
anderen in intl. Meilen, im nächsten in amerik. Meilen, gebraucht wird 
aber km. Wenn die Seemeilen wie üblich mit nm (nautische Meile) 
abgekürzt werden und/oder nicht klar ist was mit ml 
(Milliliter/Meile(welche intl. o. US)) oder m (Meter/Meile) gemeint ist, 
weil nicht mi für Meile benutzt wurde, hilft das alles nichts.
Wenn's um das "API" an sich geht wären DOM, XPath die Stichworte (bzw. 
die Entsprechungen im verwendeten Framework. Z.B. XPathNavigator .Net)
http://msdn.microsoft.com/en-us/magazine/cc164116.aspx

von Finsbury (Gast)


Lesenswert?

Genau vor diesem Problem stand ich vor einiger Zeit auch. Ich wollte für 
meine Software unbedingt ein xml-lesliches Format. DOM/SAX war dabei 
allerdings mehr Aufwand als Nutzen und so hab ich den Parser kurzerhand 
selbst programmiert. Liest die Baumstruktur (öffnende/schließende 
Tags/Attribute) und macht daraus Elemente aus Pfad und Attribut pro 
Pfadebene. Beim Schreiben wird das einfach wieder in Tags etc umgesetzt. 
Einfügen/Lesen/Löschen von Elementen ist durch eine minimalistische 
Abfrage-Sprache umgesetzt.
Die Umsetzung (alles in C, ohne irgendwelche libs und damit 'from 
scratch') war streckenweise etwas knifflig, ging aber. Bisher läuft das 
sehr gut. Also nur Mut ;)

von Robert L. (lrlr)


Lesenswert?

>Genau vor diesem Problem stand ich vor einiger Zeit auch. Ich wollte für
>meine Software unbedingt ein xml-lesliches Format. DOM/SAX war dabei
>allerdings mehr Aufwand als Nutzen und so hab ich den Parser kurzerhand
>selbst programmiert.

deshalb mach man das ja auch nicht selber...

idealerweise macht man sich dazu erst mal eine
http://de.wikipedia.org/wiki/XML_Schema

dann ist das ganz auch für andere/externe mal (relativ) gut dokumentiert

dann gibt es (sollte es) ja für "jede"  Programmiersprache ein 
XML-databinding geben (in delphi gibts das zumindest ;-) )
dass daraus die entsprechenden Objekte erzeugt

mit einem xml-editor (der xsd unterstützt) und dem XML-databinding hat 
man(n) dann quasi mit wenigen Mausklicks alles beisammen)

(kommt aber natürlich immer auf Einsatzzweck und Ressourcen an.. was man 
dann verwendet..)

> Wie kann man am besten aus einer XML-Datei Daten
>auslesen und damit eine neue XML-Datei generieren?

das würde ich u.U auch mit xslt machen

ps: ich sehe gerade dass meine Antwort der 1. Antwort in diesem thread 
sehr ähnelt..  aber egal, doppelt hält besser ;-)

von robocash (Gast)


Lesenswert?

1) Der [b]SAX-Parser[/b] ist ein Stream-Parser-API mit 
CALLBACK-Funktionen. Er braucht kaum Hauptspeicher.

2) Mit der Funktion startElement() von SAX hinterlegst du eine Funktion, 
die dann anspricht wenn der Elementname (wird dir als Parameter 
übergeben) für dich interessant ist. Prüfen des Namens musst du 
implementieren.

3) Mit startElement() und endElement() kannst du mit Unterfunktionen 
oder einem Schachtelungszähler ermitteln, ob es sich um ein 
gleichnamiges Element handelt, das aber ein anderes Elternelement hat 
oder das in einer anderen Ebene steht.

4) Implementierungen gibt es in JAVA oder als XERCES-C++.

5) Ausgabe einer XML-Datei kann mit perfektem Zeichensatz mit einem 
SERIALIZER des Parsers erfolgen. Es geht auch mit der Funktion printf(). 
Hier solltest du Die Ausgabe der Elemente mit Unterfunktionen 
hierarchisch schachteln. Die Unterfunktionen sollten die Namen der 
XML-Elemente tragen. Am besten du rückst die Elemente sauber mit 2 bis 
drei Leerzeichen pro Schachtelungsebene ein.

6) Ein XML-Tag kann man mit REGEXP oder auch einem abstrakten Automat 
parsen, da es nicht geschachtelt ist. Um die Schachtelung der Elemente 
zu prüfen, ist ein abstrakter Kellerautomat notwendig, der also selbst 
RAM alloziert (für den Keller). So könnte ein µC eine kleine XML-Datei 
parsen.

7) XSLT ist eine andere Technik, die eine XML-Datei mit Such-und 
Ausgabefunktionalität umwandelt, ohne ein Zwischenergebnis zu speichern. 
Sie ist in Firefox- und IE-Browser eingebaut. Es ist mit XSLT nur 
möglich, Konstanten an einer Stelle der Datei anzulegen, man kann sie 
nicht ändern. Deshalb brauchst du für Zählvorgänge eine rekursive 
Programmierung. Dieses Konzept wird für den PC angewendet, nicht bei µC, 
weil es dynamisch Speicher holt. Das Konzept des XPATH realisiert die 
Suchfunktionalität in XSLT, es ist im übertragenem Sinne das 
SELECT-Statement von SQL.

8) XML enthält Textknoten. Eine beliebige Anzahl von Tabulatoren, 
Zeilentrennern und Leerzeichen zwischen zwei Wörtern des Textes gilt als 
genau ein Leerzeichen. XML legt nicht eindeutig fest, ob ein Leerzeichen 
vor dem ersten Wort oder nach dem letzten Wort des Textknotens auch als 
Leerzeichen gilt. Auch Leerzeichen ohne Text zwischen zwei Knoten sind 
nicht klar definiert. Der Grund ist, dass man durch Einfügen beliebigen 
Leer-Raumes die XML-Datei formatieren kann, und dass diese Formatierung 
sich auf das Ergebnis des Parse-Vorganges nicht auswirken darf.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.