Forum: PC-Programmierung XML parsen in JS


von Viktor (Gast)


Lesenswert?

Hallo Leute.

Ich habe eine Frage an die Programmierer/Skripter unter Euch.

Ich möchte eine XML-Datei mittels Javascript auslesen.
Dabei soll ein HTML-Input dazu dienen, den eingegebenen Wert in allen 
Nodes des XML zu suchen und vom gefundenen Element alle Werte ausgeben.

XML:
1
<system-data-structure>
2
  <staff-listing>
3
    <section>1</section>
4
    <abbr>AK</abbr>
5
    <name>Anna</name>
6
        </staff-listing>
7
        <staff-listing>
8
    <section>1</section>
9
    <abbr>KW</abbr>
10
    <name>Bernd</name>
11
        </staff-listing>
12
</system-data-structure>

Gebe ich nun in das Inputfeld in HTML (<input type="text" id="term">) 
z.B. "Be" (für Bernd) ein und klicke auf den Search-Button, soll in die 
div "result" der komplette Datensatz von "Bernd" aufgelistet werden, 
also Section, Abbr und Name.

Könnt ihr mir weiterhelfen?

Vielen Dank!

von Georg M. (g_m)


Lesenswert?

Es muss irgendwie mit String funktionieren
https://www.w3schools.com/js/js_string_methods.asp

von Jan H. (j_hansen)


Lesenswert?

In welcher Umgebung? NodeJS, IE6,...

Ich würde mir jQuery reinziehen, damit geht XML parsen und Knoten 
selektieren einfach und über verschiedene Umgebungen hinweg zuverlässig.

von Nop (Gast)


Lesenswert?

Viktor schrieb:

> Dabei soll ein HTML-Input dazu dienen, den eingegebenen Wert in allen
> Nodes des XML zu suchen und vom gefundenen Element alle Werte ausgeben.

Bedenke, daß das für eine Handvoll Datensätze sicherlich gehen wird, 
aber für größere Datenmengen wird das schnarchlangsam, egal wie gut Dein 
Auswerter geschrieben ist. XML ist als Datenbankformat ungeeignet.

von Daniel A. (daniel-a)


Lesenswert?

Nur mal eben schnell zusammengehackt:
https://jsfiddle.net/ppjuuhg7/

von Viktor (Gast)


Lesenswert?

Hi!

>Nur mal eben schnell zusammengehackt:
Wow, stark, das hilft schon mal.

Allerdings parst der nur nach dem eingegebenen "Name" und nicht nach dem 
Rest, nach dem gesucht werden kann, oder?

von Daniel A. (daniel-a)


Lesenswert?

Einfach die Filter arrow function anpassen.
Entweder checks für die anderen Felder hinzufügen: 
https://jsfiddle.net/ppjuuhg7/3/
Oder einfach über den gesammten Text suchen: 
https://jsfiddle.net/ppjuuhg7/2/
Diese varianten können aber erst mit nur einem Suchbegriff umgehen.

von Viktor (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Daniel, vielen Dank erstmal für deine Mühe!

Ich habe nun mal deinen Code entsprechend an die Suchfelder angepasst, 
die durchsucht werden sollen.

Ich habe sie entsprechend in update() geschrieben.

Ich schicke hier mal meinen Code, damit man das vielleicht besser 
nachvollziehen kann.

Entscheidend ist index.html,   data/data.xml und js/search.js.

Bei mir läuft das irgendwie nicht wie es soll, da nichtmal irgendeine 
Augabe stattfindet wie bei dir. :(


Kannst du helfen?

Danke!

von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Die Daten in der Datei data.xml müssen irgendwie geladen werden. Dies 
ist mit den fetch oder XMLHttpRequest APIs möglich. Zudem müssen die 
Teile des Scripts, welche auf HTML elemente zugreifen, erst ausgeführt 
werden, nachdem diese geladen wurden. Dazu kann man die Ausführung des 
gesamten Scriptes zu dem Zeitpunkt verzögern, an welchem die ganze HTML 
Datei geladen wurde, indem man das defer attribut des Script tags 
verwendet. Ich habe deinen Code mal noch etwas Angepasst, siehe Anhang.

Ganz Ideal ist es aber noch nicht. Einige der APIs, wie z.B. die 
DOMParser API funktionieren nur in relativ neuen Browsern. Das 
eingelesene XML Document dient nur dem Speichern von Daten, aber auf 
diese zuzugreifen ist relativ Umständlich. Eventuell würde es sinn 
machen dieses in ein DTO oder POJO umzuwandeln, um einfacher mit den 
Daten umgehen zu können, oder statt XML Json zu verwenden. Und falls die 
GUI Complexer werden sollte könnten Templating Frameworks nützlich 
werden.

von aditya singh (Gast)


Lesenswert?


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.