Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus XML sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Daten aus XML sortieren

    Hallo,

    ich habe folgende Frage:
    Ich beziehe über AJAX Daten im XML Format (wird via PHP generiert) und möchte diese via JS in einer Tabelle ausgeben. Hierfür benutze ich die normalen JS Befehle und kein DOM.
    Jetzt möchte ich es möglich machen, die Daten in der Tabelle zu sortieren. Ich würde dann ganz einfach immer die Daten aus der XML Datei neu in die Tabelle schreiben. Wie kann ich jetzt aber nach bestimmten Feldern bzw. Spalten sortieren?

    Beispiel der XML Datei:

    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <items>
    <item>
    <id>5</id>
    <name>Name</name>
    <email>name@domain.tld</email>
    <lastonline>1234567890</lastonline>
    </item>
    </items>
    Die Daten füge ich übriengs auch direkt wieder über appendChild() in die Tabelle ein.


    mfg
    Link

  • #2
    Re: Daten aus XML sortieren

    Zitat von GSJLink
    Hierfür benutze ich die normalen JS Befehle und kein DOM.
    Verstehst Du, was ich Dir damit sagen möchte?

    Kommentar


    • #3
      Ok, Grund dafür war eigentlich nur, dass ich von dem JS DOM noch keine Ahnung habe. Kann ich denn mit dem JS DOM so Spalten gut sortieren? Gibt es außerdem noch die Möglichkeit (wenns eine for Schleife ist sowieso) festzulegen, wieviele Datensätze man (evtl. noch ab dem wievielten) ausgibt?

      Wenn das alles damit geht, würde es sich für mich rentieren, dass ich mich mit dem JS DOM auseinandersetze ansonsten nicht

      mfg
      Link

      Kommentar


      • #4
        Zitat von GSJLink
        Kann ich denn mit dem JS DOM so Spalten gut sortieren?
        Kann mir das keiner sagen?

        mfg
        Link

        Kommentar


        • #5
          Ach benutz lieber JSON, dann haste das ganze Geraffel als Array, da macht sortieren (noch ) mehr Spass.

          http://de.selfhtml.org/javascript/ob...array.htm#sort

          Sonst kannste mit Array.prototype nen eigenen Sortieralgorithmus implementieren.
          Quicksort z.B.:
          http://www.google.de/search?hl=de&q=...le-Suche&meta=
          (ein Blick auf den Link nach .cn lohnt mal)

          Kommentar


          • #6
            Ok zu JSON habe ich was in meinem AJAX Buch. Die Methode mit dem eval() gefällt mir an sich zwar net, allerdings kann man ja ne Loginüberprüfung in der AJAX asy Datei machen und dann sollte das auch sicher sein.

            Der Sortieralgorithmus wird dann nen dicker Haufen Arbeit, weil ich ja nicht die Inhalte der Arrays so sortieren kann sondern nach den Inhalten im Array im Array sortieren will ^^

            Ok ich probiers mal, ansonsten bleib ich nur mein Auslesen und lass die Sortierung mySQL übernehmen

            Thx für die schnelle Hilfe.

            mfg
            Link

            Kommentar


            • #7
              Zitat von GSJLink
              Ok zu JSON habe ich was in meinem AJAX Buch. Die Methode mit dem eval() gefällt mir an sich zwar net, allerdings kann man ja ne Loginüberprüfung in der AJAX asy Datei machen und dann sollte das auch sicher sein.
              Richtig, aber drauf geschissen was clientseitig abgeschickt wird, wichtig ist wie die Überprüfung der Login-Daten serverseitig von Statten geht.
              Sonst mal hier reinschauen:
              http://www.json.org/js.html

              Der Sortieralgorithmus wird dann nen dicker Haufen Arbeit, weil ich ja nicht die Inhalte der Arrays so sortieren kann sondern nach den Inhalten im Array im Array sortieren will ^^
              Du willst es ja unbedingt selbst machen .. YUI sortiert dir Tabellen spaltenweise selbst. Tolle Sache, mit der Webdeveloper-Toolbar im Firefox und SHIFT+STRG+F kannste genau ermitteln, wie die erzeugte Tabelle im CSS anzusprechen ist.

              Kommentar


              • #8
                Ok mal schauen, hab gerad mal bei den Googleergebnissen geschaut und nen paar brauchbare Funktionen gefunden, sollte nicht allzuschwer sein. Die Tabelle fülle ich übrigends wieder direkt mit der appendChild Methode. Aber die Funktion in der Web Toolbar ist echt nützlich ^^ Thx.

                So bin dann mal was zusammenbauen. Wenn das von der Performance hinhaut, seh ich mal weiter

                mfg
                Link

                Kommentar


                • #9
                  So, also ich habe dann mal eine schöne Tabelle zusammengebaut, die ihre Daten via JSON bezieht. Das ganze funktioniert schonmal übelst geil Dickes THX nochmal

                  Jetzt zum Sortieralgorithmus. Ich habe in deiner Googlesuche mal eine kleine Funktion gefunden, die wie folgt aussieht:

                  Code:
                  Array.prototype.sortAsc = function(intCol) {
                  				
                  for(var i = 0; i < this.length - 1; i++) {
                  for(var j = (i + 1); j < this.length; j++) {
                  if(this[j][intCol] < this[i][intCol]) { // <- Knackpunkt
                  var arrHelp = this[i];
                  this[i] = this[j];
                  this[j] = arrHelp;
                  }
                  }
                  }
                  
                  }
                  Das sortieren damit funktioniert schonmal ganz gut. Man gibt also unter intCol (hab ich etwas abgewandelt, da ich Textnamen statt Zahlen für die Spalten nehme) den Spaltennamen ein und danach sortiert er dann. Den Vergleich der Werte liefert

                  Code:
                  if(this[j][intCol] < this[i][intCol])
                  Jetzt habe ich aber das typische Problem, dass er Zahlen falsch ordnet. Ob er Text so richtig ordnet kann ich noch nicht sagen, scheint er aber zu tun. Ich hab jetzt die Möglichkeit mittels einer Variable abzufragen, welchen Typ die Spalte hat (von mir vorgegeben, z.B. text, int, date, etc.). Wie kann ich die Stelle da so verändern, dass das mit dem Sortieren bei allen Datentypen funktioniert?


                  mfg
                  Link

                  Kommentar


                  • #10
                    Ich sitze gerade an einem ähnlichen Projekt, ich würd mich freuen wenn du hier mal testbaren Code posten würdest

                    Kommentar


                    • #11
                      Ich kann das Ganze leider nur Auszugsweise posten, da der Großteil ohne mein Framework nicht wirklich funktioniert

                      Ersteinmal brauchst du einen Beispiel JSON String:

                      Code:
                      echo '
                      {
                      "ResultSet":
                      {
                      "Result":
                      [
                      {
                      "id": "2",
                      "name": "A",
                      "email": "aac@marbec.de",
                      "lastonline": "1234567890"
                      },
                      {
                      "id": "1",
                      "name": "B",
                      "email": "cde@marbec.de",
                      "lastonline": "1234567890"
                      },
                      {
                      "id": "3",
                      "name": "C",
                      "email": "xyz@marbec.de",
                      "lastonline": "1234567890"
                      }
                      ]
                      }
                      }
                      Den String hole ich mir via AJAX und wandle den dann in ein Objekt um:

                      Code:
                      json_object = eval("(" + xhttp.responseText + ")");
                      Aus diesem Objekt extrahierst du jetzt den Array mit den Daten:

                      Code:
                      var rows = json_object.ResultSet.Result;
                      Den Array rows kannst du jetzt über die Sortierfunktion nach einer Spalte sortieren:

                      Code:
                      Array.prototype.sortAsc = function(intCol) {			
                      for(var i = 0; i < this.length - 1; i++) {
                      for(var j = (i + 1); j < this.length; j++) {
                      if(this[j][intCol] < this[i][intCol]){
                      var arrHelp = this[i];
                      this[i] = this[j];
                      this[j] = arrHelp;
                      }
                      }
                      }
                      }
                      Code:
                      rows.sortAsc("id"); //Sortiert hier nach der Spalte id
                      Jetzt kannst du den Array rows einfach via for Schleife ausgeben und auf die Inhalte (z.B. row.id) zugreifen und in einer Tabelle speichern

                      Hoffe ich konnte dir damit etwas helfen

                      mfg
                      Link

                      Kommentar


                      • #12
                        Ok das mit dem Sortieren funktioniert jetzt übrigends, du darfst numerische Werte halt einfach nicht in Anführungszeichen in den Array schreiben, dann behandelt der die ganz normal als Zahlen und sortiert die richtig.

                        Btw: ich hab auch schonmal nen kleinen Stresstest gemacht. Ich bin bis 1000 Einträge hoch gegangen. Laden ist kein Problem (ist ja nen lokaler Server xD), beim Sortieren etc. dauert das ganze dann aber schon etwas länger (~ 5sek). Hab übrigends nen T7200 im Notebook drin (2x2GHz). Bei nem anderen PC mit nem A64 3000+ dauerts ähnlich lange. Ist aber noch vertretbar, dafür dass man in der Zeit nichts an Daten neuladen muss.

                        Und dann bräucht ich noch ne kleine Empfehlung. Macht es Sinn die Suchfunktion über JS zu machen (also auch den JSON Array zu durchsuchen) oder sollte man das dann doch lieber via SQL machen?


                        mfg
                        Link

                        Kommentar


                        • #13
                          5sek? Naja, da bekommt man schon nen nervösen Zeigefinger.

                          Kommentar


                          • #14
                            Na gut man muss die 5 sek halt in Relation sehen. Wenn ich jetzt z.B. nur 100 Einträge habe und die sortieren möchte, oder durchblättern, geht das mit der Methode wesentlich schneller als wenn man alles via PHP neuladen müsste. Außerdem gibts da nur eine Datenbankabfrage, was bei Multiuser Nutzung auch von Vorteil sein kann

                            mfg
                            Link

                            Kommentar

                            Lädt...
                            X