mikrocontroller.net

Forum: PC-Programmierung XML parsen in JS


Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
<system-data-structure>
  <staff-listing>
    <section>1</section>
    <abbr>AK</abbr>
    <name>Anna</name>
        </staff-listing>
        <staff-listing>
    <section>1</section>
    <abbr>KW</abbr>
    <name>Bernd</name>
        </staff-listing>
</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!

Autor: Georg M. (g_m)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Es muss irgendwie mit String funktionieren
https://www.w3schools.com/js/js_string_methods.asp

Autor: Jan H. (j_hansen)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nop (Gast)
Datum:

Bewertung
-2 lesenswert
nicht 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.

Autor: Daniel A. (daniel-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur mal eben schnell zusammengehackt:
https://jsfiddle.net/ppjuuhg7/

Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel A. (daniel-a)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Viktor (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Daniel A. (daniel-a)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.