Zlecę przerobienie skryptu prezentującego dane XML w HTML

0

Zlecę przerobienie skryptu który pobiera z pliku .xml dane i wyświetla je w tabeli w pliku .html na taki który będzie pobierał dane z wszystkich plików .xml w tej samej lokalizacji w której znajduje się skrypt.

Działający skrypt:

<script>
  function loadDoc() {
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
      myFunction(this);
    }
    xhttp.open("GET", "Wi-Fi-GRUCA.xml");
    xhttp.send();
  }
  function myFunction(xml) {
    const xmlDoc = xml.responseXML;
    const x = xmlDoc.getElementsByTagName("WLANProfile");
    let table="<tr><th>Nazwa sieci</th><th>Hasło</th></tr>";
    for (let i = 0; i <x.length; i++) { 
      table += "<tr><td>" +
      x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue +
      "</td><td>" +
      x[i].getElementsByTagName("keyMaterial")[0].childNodes[0].nodeValue +
      "</td></tr>";
    }
    document.getElementById("demo").innerHTML = table;
  }
</script>

Link do lokalizacji:
https://kajakielk.pl/pass/index_.html

Link do plików xml
https://kajakielk.pl/pass/

0

Chcesz, żeby securitowcy natychmiast dostali zawały co do takiego rozwiązania ?

0
ZrobieDobrze napisał(a):

Chcesz, żeby securitowcy natychmiast dostali zawały co do takiego rozwiązania ?

Wydaje mi się, że to nic takiego. Jeżeli w jakiś sposób złamałem regulamin to będę bił się w pierś i zmienię nazwę plików na piosenkarzy i albumy muzyczne. ;)

0

To nie ma nic do regulaminu forum, ale spsoób przetwarzania danych, jakby nie mówiąc, trochę poufnych, na kliencie.

To powinno być bronione po server-side

0

Ogólnie jak dobrze rozumiem masz XML i chcesz to wyświetlić w postaci tabeli HTML? Jeśli tak to nie potrzebujesz nic przerabiać tylko napisać dość prostą transformatę do XML. Poczytaj o XLST w XML i wtedy możesz sobie xml wyświetlać jak Ci się żywnie podoba :P
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog

0
ZrobieDobrze napisał(a):

To nie ma nic do regulaminu forum, ale spsoób przetwarzania danych, jakby nie mówiąc, trochę poufnych, na kliencie.

To powinno być bronione po server-side

Chciałbym stworzyć sobie plik na serwerze w którym będę wrzucał pliki z sieciami ogólno dostępnymi. Takie jak sieci w parkach, urzędach miast, szpitalach, stacjach benzynowych itd. I będę miał taką listę dostępnych siedzi wifi. Być może kiedyś to bym udostępnił ale póki co chciałem to tylko sobie mieć.

0
woolfik napisał(a):

Ogólnie jak dobrze rozumiem masz XML i chcesz to wyświetlić w postaci tabeli HTML? Jeśli tak to nie potrzebujesz nic przerabiać tylko napisać dość prostą transformatę do XML. Poczytaj o XLST w XML i wtedy możesz sobie xml wyświetlać jak Ci się żywnie podoba :P
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog

Wiesz co mam kilka plików na serwerze .xml i chcę z wszystkich plików na raz wyciągnąć dane i wyświetlić je w tabeli. Z jednego pliku już mi skrypt wyciąga i to ładnie działa, natomiast mam problem aby to zrobić na wszystkich plikach .xml w danej lokalizacji. Czyli wrzucam pliki w określone miejsce ftp-em a skrypt nie znając nazw plików (bo nazwy będą różne) będzie sprawdzał pliki i każdy który ma rozszerzenie .xml będzie przeszukiwał i wyciągał dane.

Mam skrypt który w teorii powinien działać ale coś nie gra.

<script>
  function loadDoc() {
    const xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        const fileList = this.responseText.split('\n');
        const xmlFiles = fileList.filter(file => file.endsWith('.xml'));
        xmlFiles.forEach(fileName => {
          const xhttp2 = new XMLHttpRequest();
          xhttp2.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
              myFunction(this);
            }
          };
          xhttp2.open("GET", fileName);
          xhttp2.send();
        });
      }
    };
    xhttp.open("GET", '.');
    xhttp.send();
  }
  
  function myFunction(xml) {
    const xmlDoc = xml.responseXML;
    const x = xmlDoc.getElementsByTagName('WLANProfile');
    let table = '<tr><th>Nazwa sieci</th><th>Hasło</th></tr>';
    for (let i = 0; i < x.length; i++) { 
      table += '<tr><td>' +
        x[i].getElementsByTagName('name')[0].childNodes[0].nodeValue +
        '</td><td>' +
        x[i].getElementsByTagName('keyMaterial')[0].childNodes[0].nodeValue +
        '</td></tr>';
    }
    document.getElementById('demo').innerHTML += table;
  }
</script>

Tu trochę to czytelniej wygląda:

https://codepen.io/robert-brzostowski/pen/VdjEOd

0
memento12 napisał(a):
ZrobieDobrze napisał(a):

To nie ma nic do regulaminu forum, ale spsoób przetwarzania danych, jakby nie mówiąc, trochę poufnych, na kliencie.

To powinno być bronione po server-side

Chciałbym stworzyć sobie plik na serwerze w którym będę wrzucał pliki z sieciami ogólno dostępnymi. Takie jak sieci w parkach, urzędach miast, szpitalach, stacjach benzynowych itd. I będę miał taką listę dostępnych siedzi wifi. Być może kiedyś to bym udostępnił ale póki co chciałem to tylko sobie mieć.

Wrzucać mozesz na jakis kod server-side (np w php), nie na goły katalog Apacha.
Ale taki one-way-ticket
A drugie to korzystanie z tego

1

Chciałbym podziękować za pomoc ale już sobie poradziłem z tym problemem. Powiem wprost subskrybowałem Chat GPT4 i w kilka minut dostałem gotowy kod. Z racji tego że nic nie wniosłem tym postem podaje gotowy kod dla pokoleń ;)


<script>
    function loadAllXmlFiles() {
      const xmlFiles = <?php
        $files = glob("*.xml");
        echo json_encode($files);
      ?>;
      
      loadMultipleXmlFiles(xmlFiles);
    }

    function loadMultipleXmlFiles(fileNames) {
      fileNames.forEach((fileName) => {
        const xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
            myFunction(this);
          }
        };
        xhttp.open("GET", fileName);
        xhttp.send();
      });
    }

    function myFunction(xml) {
      const xmlDoc = xml.responseXML;
      const x = xmlDoc.getElementsByTagName("WLANProfile");
      let table = "<tr><th>Nazwa sieci</th><th>Hasło</th></tr>";
      for (let i = 0; i < x.length; i++) {
        table += "<tr><td>" +
          x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue +
          "</td><td>" +
          x[i].getElementsByTagName("keyMaterial")[0].childNodes[0].nodeValue +
          "</td></tr>";
      }
      document.getElementById("demo").innerHTML += table;
    }
  </script>

Musiałem jeszcze zmienić rozszerzenie pliku na .php

Działający kod tu:

https://kajakielk.pl/pass/index_.php

---//Można zamknąć

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1