Antworten auf deine Fragen:
Neues Thema erstellen

XML Datei filtern mit jQuery

CrazyLopp

Hat es drauf

Hallo zusammen,

ich stehe gerade ein wenig auf dem Schlauch. Ich habe eine XML Datei mit relativ vielen Daten. Diese XML Datei lade ich mittels JavaScript um die Inhalte zu übertragen. Ich möchte jedoch gerne das dies noch gefiltern wird (anhand einer ID, die in den jeweiligen Nodes der XML Dukumentes stehen). Die Werte die stimmen sollen stehen in einem Array zur Verfügung.

Die XML Datei sieht so aus:
Code:
<kurs id="9" name="Test" beschreibung="09.00 - 15.00" datum="18.12.2012 09:00" dozent="Test" raum="Testraum"/>

Meine bisherige Übertragung sieht wiederum so aus:
Code:
var xml = parseXml(data);
var kurs = xml.documentElement.getElementsByTagName("kurs");
        
for (var i = 0; i < kurs.length; i++) {
var id = kurs[i].getAttribute("id");
var name = kurs[i].getAttribute("name");
var datum = kurs[i].getAttribute("datum");

Hat jemand eine Idee wie ich die Ausgabe filtern kann?
 

Robbyn-

PHP / Flex Programmierer

AW: XML Datei filtern mit jQuery

Versuche es mal hiermit:

Code:
var xml $.parseXml(data);
var kurs = xml.find('kurs');

for(var i = -1; ++i < kurs.length;)
{
  var id = kurs[i].getAttribute("id");
  var name = kurs[i].getAttribute("name");
  var datum = kurs[i].getAttribute("datum");
}
 

Duddle

Posting-Frequenz: 14µHz

AW: XML Datei filtern mit jQuery

Was erhältst du derzeit als Ausgabe? Beziehungsweise, was ist das Problem?

Ich habe noch nicht mit XML in JS gearbeitet, aber dein Code sieht mir korrekt aus. Nur der Zugriff auf die Attribute erfolgt lt. mit
Code:
attributes[0].nodeValue
bzw.
Code:
attributes.getNamedItem("id").nodeValue
Dann gehst du durch alle Elemente durch, schaust dir die id an und .

Edit: oh, jQuery scheint da auch was zu bieten. Darüber ist es wohl noch einfacher.


Duddle
 

CrazyLopp

Hat es drauf

AW: XML Datei filtern mit jQuery

Das Beispiel oben funktioniert einwandfrei, das ist auch nicht das Problem. Das Problem ist, das ich noch weiter filtern muss. Ich habe eine Liste (56,57,58). Ich möchte gerne die ID des Nodes mit dieser Liste abgleichen und alle die nicht passen nicht ausgeben lassen...
 

Robbyn-

PHP / Flex Programmierer

AW: XML Datei filtern mit jQuery

Ok, dann verstehe ich selbst aber das Problem auch noch nicht so richtig, es gibt doch eine simple Lösung, einfach eine Schleife durchlaufen lassen die die ids miteinandere abgleicht und wenn die id nicht vorkommt einfach schleife mittels continue; abbrechen und nächsten durchlauf starten lassen.

Oder verstehe ich das immer noch falsch?


P.S Oder die ganz simple Lösung mittels jQuery:

Code:
var find = $.inArray(2,arr);
 
Zuletzt bearbeitet:

Myhar

Hat es drauf

AW: XML Datei filtern mit jQuery

Dann schreib das doch in deinen Anfangspost. Wenn man weiß, wo dein Problem ist, kann dir auch geholfen werden.
Ich gehe davon aus, dass die Zahlen: 56, 57, 58 verschiedene IDs sind, die du mit deiner Liste abgleichen möchtest. Falls nicht, dann musst du dein Problem erneut konkretisieren.
Du kannst die durchlaufen? Also so in etwa (Pseudocode):
Code:
for ( i in Liste){
if (kurs[i].getAttribute("id) ) {
  //Der Kurs existiert... Die Abfrage gehört noch angepasst, auf einen nicht existenten Kurs... Aber so müsste es doch vom Prinzip her gehen?
}

}
 
Zuletzt bearbeitet:

CrazyLopp

Hat es drauf

AW: XML Datei filtern mit jQuery

@Myhar Ja genau das möchte ich. Ich habe nun versucht es mt einem Array zu lösen:
Code:
downloadUrl("../server/phpCore/kurse/kurs-ausgabe.php", function(data) {
	var xml = parseXml(data);
	var kurs = xml.documentElement.getElementsByTagName("kurs");
    
    
    
    var kursListe = $(".kurseListe").text();
    var kursListeArray = kursListe.split(", ");
    var kursListeArrayFinal = jQuery.makeArray(kursListeArray);
    
    for (var i = 0; i < kurs.length; i++) {
		var id = kurs[i].getAttribute("id");
        var gruppenID = kurs[i].getAttribute("gruppenID");
		var name = kurs[i].getAttribute("name");
		var datum = kurs[i].getAttribute("datum");
        
		if($.inArray(gruppenID,mytestarray)) {
            var html = "<div class='kurs' id='kurs"
                        + id +
                        "'><span class='kursLink' id='"
                        + id +
                        "'><span class='kursName'>"
                        + name +
                        "</span><span class='kursDatum'>"
                        + datum +
                        "</span></span></a></div>";
            $("#naechsteKurse").after(html);
        } else {
            alert("keine Übereinstimmung");
        }
  }
});

Es werden zuerst nur alle Kurse genommen, dann erstelle ich aus einem String, der so aussieht: 2,4,7,8,9 und in einem span steht, ein Array. Im folgende Versuche ich dann mit der If Abfrage ob die GruppenID des Kurses mit einer Zahl des Arrays übereinstimmt. Wenn es der Fall ist soll er es ausgeben, sofern nicht dann nicht...

Ich hoffe man konnte es nun verstehen, doch leider will das nicht funktionieren...
 

Duddle

Posting-Frequenz: 14µHz

AW: XML Datei filtern mit jQuery

"Funktioniert nicht" ist keine Fehlerbeschreibung.

Was mir aber sofort auffällt: du benutzt jQuerys .inArray() falsch. Das gibt den Index der gefundenen Nadel im Heuhaufen wieder. Beim Fehler / Nichtfinden gibt er -1 zurück. Wenn du es aber so machst wie jetzt wertet er auch den Index 0 als false aus, also ignoriert er diese ID.

Ansonsten sehe ich auf den ersten Blick nichts weiter. Fehlerausgaben o.ä. wären wie gesagt sehr hilfreich.
Aber weil du selbst schon deinen Ansatz vorgeschlagen hast, biete ich hiermit meinen. Das funktioniert zumindest in meinem Testfall wie erwartet und benutzt ein paar von jQuerys Helferlein aus:
PHP:
var xml = '<kursliste> <kurs id="9" name="Test" beschreibung="09.00 - 15.00" datum="18.12.2012 09:00" dozent="Test" raum="Testraum"/> <kurs id="20" name="Test2" beschreibung="09.00 - 15.00" datum="18.12.2012 09:00" dozent="Test" raum="Testraum"/> </kursliste>';
var xmlDoc = $.parseXML(xml);
$xml = $(xmlDoc);
var erlaubteIDs = $(".kurseListe").text().replace(/\s/g,'').split(",");
var kurse = $xml.find("kurs");

kurse.each(function() {
    var kurs = $(this);
    var id = kurs.attr("id");
    if($.inArray(id, erlaubteIDs) == -1) return true; //entspricht continue

    var name = kurs.attr("name");
    var html = "<h1>"+name+"</h1><span>ID: "+id+"</span>";
    $("#ausgabe").after(html);
});
});
Mein XML ist für die Testzwecke in einem String, aber wie du zu einem XML-Objekt kommst ist ja letztlich egal. Die erlaubten IDs kommen wie bei dir aus einem <span>. Ich entferne lediglich zwischendurch alle Leerzeichen, damit der split() sauberer ist. Danach werden alle <kurs>-Elemente geholt und darüber iteriert. Wenn er eine erlaubte ID hat, wird das HTML erzeugt.

Falls du Fragen dazu hast, immer her damit.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.477
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben