Forum: PC-Programmierung Informationen aus großer, komplexer XML Datei extrahieren


von Chris H. (hergi)


Lesenswert?

Hallo,

meine Aufgabe besteht darin, irgendeine Suchmaske, ein Programm oder 
ähnliches zu erstellen/ zu finden, was Informationen aus einer großen 
XML Datei herausholt und übersichtlich darstellt.
Die XML-Datei stellt dabei quasi ein Wörterbuch dar, es gibt also jede 
Menge Einträge mit Übersetzungen, Erklärungen und weiteren 
Informationen.
Am Ende soll man in ein Textfeld o.ä. ein Wort eingeben und dann die 
Übersetzungen und Informationen schön angezeigt bekommen.

Habe bisher jede Menge XML Editoren gefunden, die alle eine schöne 
Baumstruktur zeigen aber das hilft mir nicht wirklich weiter.
Kennt jemand einen fertigen Editor oder Programm, was die Aufgabe 
erfüllt, wo ich also irgendwie auswählen kann, welche Knoten mit Wert 
angezeigt werden sollen und wo ich vorher noch nach nem bestimmten 
Eintrag suchen kann?

Oder müsste man selbst was programmieren? XML-Bibliotheken gibts ja für 
ziemlich viele Programmiersprachen frei zugänglich. Welche Sprache 
würdet ihr empfehlen? Hab bisschen Erfahrung mit C/C++, Java und Perl, 
Visual Basic krieg ich auch bisschen was hin denk ich.

Außerdem bin ich noch auf Xforms gestoßen 
(http://de.wikipedia.org/wiki/XForms). Damit könnte man sowas auch 
basteln, denk ich, allerdings ist die Unterstützung in den Browsern noch 
nich so weit...

Was würdet ihr vorschlagen? Bin für sämtliche Hinweise und Ideen offen 
=)

von Frank (Gast)


Lesenswert?

Ich benutze Real Studio (früher RealBasic), das enthält leistungsfähige 
Methoden zum Erstellen und Lesen von XML-Strukturen. Wenn du dich mit 
dem Aufbau von XML-Dateien auskennst (xmlnodes usw.), sollte es kein 
großes Problem sein, ein Suchprogramm zu schneidern.
Real Studio bietet ausserdem noch den Vorteil, dass du auf Knopfdruck 
lauffähige Programme aus ein und den selben Quelltext für Windows, Mac 
OS und Linux erhältst.

von escamoteur (Gast)


Lesenswert?

Nimm einfach C# und benutze das DOM-Interface, damit kannst Du ziemlich 
bequem in der Datei suchen.

gruß
Tom

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Für das Auffinden von Informationen in XML Dokumenten eignet sich z.B. 
XPath. Um eine wenig Programmieren wirst du aber vermutlich nicht 
herumkommen, da die meisten Programme wohl für allgemeines Betrachten 
von XML Strukturen gedacht sind. Du müßtest dir halt auch überlegen ob 
du immer das ganze XML im Speicher halten willst/kannst oder ob das 
unpraktikabel ist.
Wenn du für das XML sogar ein XSD hast, kannst du dir sogar unter Java 
eine Komplette Objektstruktur erzeugen lassen und dann per Hand suchen, 
oder wie gesagt über XPath suchen lassen...

von Chris H. (hergi)


Lesenswert?

Danke für die Antworten schonmal.


Real Studio sieht ganz interessant aus, ich bräuchte aber irgendne 
Lösung, die ich nur mit freien Werkzeugen erreichen kann...

Mit C# hab ich bisher noch rein garnix gemacht, würd ich erstmal 
hintenanstellen.

Über XPath hab ich schon paar Sachen gelesen, aber das wäre ja nur die 
Methode, Daten innerhalb der XML Datei zu suchen. Das müsste ich ja dann 
noch irgendwie verpacken, in z.B. JavaScript oder so, oder?

XSD hab ich keins, eine DTD hätte ich aber.

von Εrnst B. (ernst)


Lesenswert?

XSLT wär evtl. noch was. Damit aus dem Datenwust-XML-File eine schöne 
Auswertung in HTML erzeugen. Werte lassen sich per XPath aus dem XML 
ziehen, Variablen, Schleifen usw. gibts natürlich auch.
Zum Ausführen reicht ein Webbrowser.

Edit: Für deine dynamische Anwendung leider nicht so der Hit, da bei 
jeder Abfrage die Seite neu geladen werden würde...

Dann lieber Javascript, das grosse File einmalig laden, und darin 
suchen.

von Chris H. (hergi)


Lesenswert?

Ja, XSLT hatte ich mir auch schonmal kurz angeguckt aber dann, wie du 
schon sagst, wegen der dynamischen Anwendung wieder fallen lassen.

von Chris H. (hergi)


Angehängte Dateien:

Lesenswert?

So, habe mich jetzt mal einigermaßen in javascript und DOM eingelesen, 
allerdings bin ich schon bei einfachen Beispielen am verzweifeln...

z.B. hier:
1
<html>
2
<head>
3
<title>Test</title>
4
5
</head>
6
<body>
7
<script language="JavaScript" type="text/javascript"> 
8
if (window.XMLHttpRequest)
9
  {
10
  xhttp=new XMLHttpRequest();
11
  document.write('HttpRequest');
12
  }
13
else // for IE 5/6
14
  {
15
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
16
  document.write('ActiveXObject');
17
  }
18
xhttp.open("GET","start.xml",false);
19
xhttp.send();
20
xmlObject=xhttp.responseXML;
21
document.write("<p />XML document loaded into an XML DOM Object.");
22
23
d = xmlObject.documentElement;
24
if (d) document.write('<p />' + d.nodeName);
25
erstesAlbum = xmlObject.getElementsByTagName('ALBUM')[0];
26
if (erstesAlbum) document.write('<p />' + erstesAlbum.nodeName);
27
   
28
</script>
29
</body>
30
</html>

Das Beispiel soll die xml Datei start.xml (hab sie auch mal angehängt) 
laden und darin dann den Namen des root knoten ausgeben, dann nach dem 
tag "ALBUM" suchen und auch den tag ausgeben.

In Chrome klappt das alles einwandfrei, ich sehe, dass das HttpRequest 
Objekt angelegt wird und auch die beiden Knotennamen werden ausgegeben.

Im IE (Version 6) allerdings sehe ich nur, dass ein ActiveX Objekt 
erzeugt wird. Die Knotennamen werden nicht ausgegeben, d.h. die 
Variablen d und erstesAlbum werden erst garnicht initialisiert...

Ich weiß, der IE6 is schon lange out, nur leider wird der Browser hier 
in der Firma noch verwendet und die Anwendung sollte darin schon 
laufen...

Woran liegt das? Funktionieren die Methoden mit dem ActiveXObject nicht 
oder wie?

von Karl H. (kbuchegg)


Lesenswert?

Eine Anwendung, die in einem Browser läuft würde ich auf keinen Fall 
freiwillig und nur unter Androhung der Todesstrafe entwickeln.

Genau aus den Gründen, die du mitlerweile festgestellt hast. Nichts ist 
zu irgendetwas kompatibel und die meiste Zeit verscheisst man 
buchstäblich damit, die Browserunterschiede auszugleichen.

von Εrnst B. (ernst)


Lesenswert?

Karl heinz Buchegger schrieb:
> Nichts ist
> zu irgendetwas kompatibel und die meiste Zeit verscheisst man
> buchstäblich damit, die Browserunterschiede auszugleichen.

Das stimmt so nicht. Alle bis auf den IE6 sind recht kompatibel. Da gilt 
die 20/80-Regel... 20% der Zeit zum Entwickeln auf allen anderen 
Browsern, 80% zum Anpassen an den IE6.

Nachdem der IE6 aber inzwischen von MS nicht mehr supportet wird, und 
somit ein gewaltiges Sicherheitsrisiko darstellt (nicht nur für den 
Anwender, auch für den Rest des Internets) sollte man alle IE6-Benutzer 
vorsorglich einsperren. Aber nein, unsere Innenminister jagen lieber 
imaginäre Terroristen anstatt gegen die echten Verbrecher vorzugehen...

Chris Herch schrieb:
> Woran liegt das? Funktionieren die Methoden mit dem ActiveXObject nicht
> oder wie?

Ne, der IE6 mag nur nicht so richtig mit XML warm werden...
Würg-Around:
1
if(IE6) {
2
  // Leeres *XML*-Document(-Fragment) anlegen, den Response-*Text* der Query in dessen *HTML*-Parser werfen
3
  var temp=document.createElement('xml');
4
  temp.setAttribute("innerHTML",xhttp.responseText);
5
}

Dummerweise reicht das noch nicht. Du musst jetzt noch "temp" an das 
äussere document ("window.document") anhängen, und von dort wieder 
auslesen....

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Chris Herch schrieb:
> Woran liegt das? Funktionieren die Methoden mit dem ActiveXObject nicht
> oder wie?
Möglich... benutz lieber eine Lib wie jQuery welche solche Unterschiede 
automatisch handhabt.

Aber gerade im IE6 würde ich da keine Geschwindigkeitswunder beim 
bearbeiten von großen (wei groß ist eigentlich Groß?) XML Dateien 
erwarten...

von Chris H. (hergi)


Lesenswert?

Läubi .. schrieb:
> benutz lieber eine Lib wie jQuery welche solche Unterschiede
> automatisch handhabt.

lustig, habe mir gerade auch mal jQuery angeguckt und bin dabei auf 
http://think2loud.com/reading-xml-with-jquery auf ein Beispiel gestoßen.

Funzt in Chrome ohne Probleme aber mal wieder nicht im IE6... ^^

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

@Chris Herch
XML ist eine Stufige Text-Datenbank.mit Subklassen.n*.Vector[n][][][].
Exportieren ist einfach.
Hier:
http://www.youtube.com/user/IntuitiveEngineering#p/u/1/ht1kFbDAwOU


 Was soll das genau werden???
 Beschreibe das mal bitte naeher.
 Lexikalisches Woerterbuch.????

#####################################################################
Ich habe mit Doxygen via XML ein Source-Code Lexikon für eine
Embedded Dokumentation und Sicherheits-Analyse gemacht.

Framework:
XML -->EXCEL-->ACCESS SQL-+--->VBASIC_V6 @Database--<Grid>--User-SQL.
 X
/ \

Gruss Holger.

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

@Chris Herch @Forum Hallo  !
Danke, mit deinem Top(XML)Problem ! XML Datei extrahieren

Was ist den für dich bitte komplex??,die Baumstruktur
 in der Veschachtelungs-tiefe ???
Lösung1;
Bild: XML_VB_1.PNG
######################################################################## 
#
@Thema:
via Tools von Doxygen und *.XML File u. Visual-Basic V8 & DataSet1
######################################################################## 
#
Fazit:
Also VBasic V8 ist kostenlos, und kann XML Files lesen.u.schreiben.
(sogar neue Strukturen dazufügen) super...kan man dan so step
by step aufbohren.Wichtig: *.XML @"Validator"ren nicht vergessen.
Damit der @Code nicht abdreht...und die Platte vollmüllt.....
######################################################################## 
#
Quellen:
http://www.youtube.com/user/PcFr34kZ#p/u/6/5AaT3PY3Asc

unktion: WriteXmlSchema(,,,,)
Funktion: WriteXmL( steam As System.IO.Stream ...
.... (+ 7 Ueberladungen
######################################################################## 
###

######################################################################## 
###

Frage: Was sind denn bitte "7" Ueberladungen  ???


/"\
\ /
 X   Viel Erfolg !
/ \  Gruss Holger.

von c# mensch (Gast)


Lesenswert?

Holger schrieb:
> Frage: Was sind denn bitte "7" Ueberladungen  ???

7 Mögliche Varianten, der Funktion Parameter zu übergeben.

von Holger (Gast)


Lesenswert?

Danke @c# mensch
Der Parameter kann damit auch wiederum  ein anderes "Daten.Bank-Object 
sein" ???
•Front-end design 1.ter.Entwurf.
###########################################################
Quellen:
http://www.xmlvalidation.com/documentation.0.html
http://www.intuitive.uk.com/process_automation.php



Ich glaube ich habe dadurch  eine Idee bekommen.
Ich habe hier durch das  Forum viel neues gelernt.
.......unten auf der Page steht noch
.......information on Reverse Engineering  klick (@@@@Drööömel).

/ \  Gruss Holger.

von c# mensch (Gast)


Lesenswert?

Holger schrieb:
> Der Parameter kann damit auch wiederum  ein anderes "Daten.Bank-Object
> sein" ???

Jup, zB. Aber da hilft Dir eigentlich die ASCII Art ... ähhhh Intelli 
Sens vom zB. VS. ;-)).

von Chris H. (hergi)


Lesenswert?

Chris Herch schrieb:
> Läubi .. schrieb:
>> benutz lieber eine Lib wie jQuery welche solche Unterschiede
>> automatisch handhabt.
>
> lustig, habe mir gerade auch mal jQuery angeguckt und bin dabei auf
> http://think2loud.com/reading-xml-with-jquery auf ein Beispiel gestoßen.
>
> Funzt in Chrome ohne Probleme aber mal wieder nicht im IE6... ^^

Ich zitier mich einfach mal selber, hab rausgefunden, dass das mit 
jQuery nur dann nicht funktioniert, wenn ich ne Datei lokal im IE öffne 
(file:/...). Lad ich die Datei ins Web hoch funzt das ganze.

Noch ne andere Sache zu jQuery, kann ich damit xml Dateien auch 
schreibend bearbeiten? Konnte bisher noch nichts zu dem Thema finden...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Direkt nicht, du kannst natürlich dem Webserver eine Funktion verpassen 
welche es dir erlaubt XMl Daten hinzusenden und dieser speichert sie 
dann.

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.