Autor Zpráva
lolkohrad
Profil *
ahoj, prepisuju jednu aplikaci z javy do Javascriptu a protoze s JS nemam tolik zkusenosti, potreboval bych poradit.
Vytvoril jsem si parser na parsovani tagu XML. V nasledujici fci by mi melo do pole vypsat vsechny obsahy tagu, ktery mu predam v parametru, ale
kdyz kod spustim, tak mi to vypise v konkretnim pripade cislo 83, tedy pocet prvku v poli a nedokazi nijak jinak pole vypsat. Muzete mi pomoci, jak mam fci upravit, aby mi to vracelo cele pole a vypsalo na obrazovku?

Parser.poleTagu = function(xml, tag){
    try { 
        var pole = new Array();
                
        while(true){
            var x = xml.indexOf("<"+tag+">");
            var y = xml.indexOf("</"+tag+">");
            x = x+2+tag.length;
        
            if(x > -1 && y > -1){
                var apole = pole.push(xml.substring(x, y));
                console.log("promenna apole nacteno");
                xml = xml.substring(y+3+tag.length);                
            } else break;

        }
        return apole;
    } catch (e) {
        //Fce.err(e);
        return "Ne";
    };    
};
Jan Tvrdík
Profil
lolkohrad:
Vytvoril jsem si parser na parsovani tagu XML.
Proč jsi nepoužil vestavěný DOMParser?

aby mi to vracelo cele pole
Místo return apole tam zřejmě má být return pole. Proměnná apole je úplně zbytečná.

vypsalo na obrazovku?
Proč by ta funkce měla něco vypisovat?
Joker
Profil
lolkohrad:
Hodnota z pole se v JS vypíše úplně normálně, pole[index]. Řetězcové indexy jsou přístupné i objektově jako atributy pole:
var pole = new Array();
pole["foo"] = 2;
alert(pole.foo); // 2

Pokud jde o vrácení pole, tam hlavní problém je, že metoda to pole nevrací. Nevrací se pole, ale apole, což je (chybně pojmenované) číslo (de facto je to pole.length, pokud se alespoň jednou vleze do toho if-u, jinak je to undefined).

Jinak bez ohledu na znalosti JS je to podle mě špatně z obecně programátorského hlediska.
• Vynechám způsob zpracování chyb (předpokládám, že to je jen dočasné řešení během ladění).
• Pro neexistující tag to vrátí undefined.
• Podmínka x > -1 nemá žádný smysl, protože hodnota x ve chvíli té podmínky nemůže být nižší, než 1.
• V podstatě ta metoda jen počítá koncové značky daného tagu, Parser.poleTagu('</foo></foo></foo></foo>', 'foo'); vrátí 4.
• Nijak se nekontroluje, jestli vstup je vůbec XML (viz předchozí bod).
• Celé „zpracování“ XML je hodně naivní, nepočítá s atributy, ani se zanořováním značek.

Použil bych parser, jak radí už [#2] Jan Tvrdík
lolkohrad
Profil *
moc dekuji za prispevky,
na domparser kouknu, ale pro me ucely staci toto jednoduche reseni.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: