Autor Zpráva
peta
Profil
Potreboval bych funkci, ktera prevede jednoduchy XML retezec na asociativni pole, objekt. Pokud mozno bez vestavenych XML funkci. Na to jsem nasel spoustu prikladu a prijde mi to slozite nacitat string pres XML funkce a pak to prevadet adi 50ti radkovou funkci na objekt. To bych mohl rovnou, ne?

<xml>
  <polozka>
    <0>
      <nazev>text1</nazev>
      <hodnota>text2</hodnota>
    </0>
    <1>
      <nazev>text3</nazev>
      <hodnota>text4</hodnota>
    </1>
  </polozka>
  <typ>text5</typ>
</xml>  

xml = 
  {
  'polozka':
    {'0':
      {
      'nazev': "text1";
      'hodnota': text2"
      };
    '1':
      {
      'nazev': "text3";
      'hodnota': text4"
      };
    };
  typ: "text5";
  };
}


Mate nekdo tip, jak na to?
martindeveloper
Profil
Ou omlouvám se, neuvědomil jsem si že jsem v JS poradně. :)
EDIT: Co tohle http://www.kawa.net/works/js/xml/objtree-e.html ?
Chamurappi
Profil
Reaguji na peta:
<1>
V XML nesmí název elementu začínat číslem.
Má-li to XML skutečně jen takto jednoduchou strukturu, můžeš si názvy a hodnoty vytáhnout regulárním výrazem.

K tebou právě doplněnému JSONu:
Hledej převod XML do JSONu. Definice členů objektu se oddělují čárkou, ne středníkem.
peta
Profil
Chamurappi
Jo, v tom nevidim problem vytahnout hodnoty. Cisla bych nejak poresil, prizpusobil scriptu. Prozatim tam dokonce zadna nemamm, pouze v prikladu.
Spis jsem pak premyslel, jakym zpusobem kontruovat objekt stromove orientovany.
peta
Profil
martindeveloper
http://www.openjsan.org/doc/k/ka/kawasaki/XML/ObjTree/0.24/lib/XML/ObjTree.html
    var root;
    if ( window.DOMParser ) {
        var xmldom = new DOMParser();
//      xmldom.async = false;           // DOMParser is always sync-mode
        var dom = xmldom.parseFromString( xml, "application/xml" );
        if ( ! dom ) return;
        root = dom.documentElement;
    } else if ( window.ActiveXObject ) {
        xmldom = new ActiveXObject('Microsoft.XMLDOM');
        xmldom.async = false;
        xmldom.loadXML( xml );
        root = xmldom.documentElement;

... o tom mluvim. on to veme pres vestaveny XML parser, ktery ti z toho udela klasicky DOM strom a pak na to pouzije dalsich 15k kodu jeste, ktere to predelaji na tu objekt. To mi prijde jako celkem neusporne.
peta
Profil
ale aspon vim, jak se pise to cislovani :)
A sample XML source:

    <?xml version="1.0" encoding="UTF-8"?>
    <family name="Kawasaki">
        <father>Yasuhisa</father>
        <mother>Chizuko</mother>
        <children>
            <girl>Shiori</girl>
            <boy>Yusuke</boy>
            <boy>Kairi</boy>
        </children>
    </family>

Its JavaScript object tree like JSON/E4X:

    {
        'family': {
            '-name':    'Kawasaki',
            'father':   'Yasuhisa',
            'mother':   'Chizuko',
            'children': {
                'girl': 'Shiori'
                'boy': [
                    'Yusuke',
                    'Kairi'
                ]
            }
        }
    };
Chamurappi
Profil
Reaguji na peta:
To mi prijde jako celkem neusporne.
Vždyť je to také XML. Jestli chceš něco úsporného, používej JSON.
peta
Profil
Chamurappi
Ve vetsine scriptu, co jsem o vikendu nasel to pracuje takto:
1. dom = new XMLparser; //IE/FF udela to DOM tree, kde se k tomu pristupuje pres parentChild a tak.
2. pak to prozenou asi 15k kodem, ktery prave pres parentChild to rozseka do objektu
Coz dela i ten script od martindeveloper. A tomu bych se pokud mozno chtel vyhnout, delat to na 2x. Ledaze by to byla elegantni cesta, jak se vyhnout celemu kodu, ktery by mel treba 30k :)

K cemu to? Napadla mne takova trosku silenost spojit strukturu stranek Plone s JS editorem.
Mam stranku:
<!--
moje xml info (autor, datum, nazev, ...)
-->
<html>
<head>...
A ted tam nalinkuji jednoduchy <script>, ktery aktivuji tlacitkem Edit nekde ve strance a ten prave precte XML informaci, zedituje stranku a po odeslani ulozi. CMS pak nepotrebuje jinou funkci nez SAVE / login. Vse ostatni uz si dela JS u uzivatele.
Pro info jsem zvolil XML, protoze jsem myslel, ze to bude snadnejsi cesta, protoze PHP ma na to parser. Jenze jsem narazil, protoze JS z toho dela domTree, coz neci.
peta
Profil
Tak vidim, ze to mozna ulozim primo jako JS text object a pres eval prehodim na object. Mozna lepsi nez se zabyvat parserem. Ale kdyby to pak chtel nekdo importovat do lepsiho systemu, tak se potrapi :)
peta
Profil
Tady je to pekne vysvetlene s DOM parserem
http://www.hiteshagrawal.com/javascript/javascript-parsing-xml-in-javascript
peta
Profil
http://zdrojak.root.cz/clanky/json-jednotny-format-pro-vymenu-dat/
tiso
Profil
peta [#10] [#11] a? Pointa je kde?
peta
Profil
tiso
10 - tam je pekne ukazano, jak pracuje dom parser v kodu prikladu a ze se s tim pracuje dost neprijemne, pokud chces vypsat cely strom a mam pocit, ze i konkretni hodnotu. Ale jeste to promyslim.
11 - ze jsem nasel pekny clanek k JSON, ze to nezazdivam :) A diky tomu zvazuji to proste evalovat ze stringu jako JS objekt.
tiso
Profil
peta a aký si mal dôvod prečo si tie informácie v [#13] nenapísal priamo k tým odkazom? To si máme všetci domyslieť čo si tým myslel? V tom prípade to tu buď nepíš, alebo aj rozumnou formou vysvetli o čo ti ide.
peta
Profil
tiso Presne takyto pristup odhana uzivatelov fora :) Kd nechces, aby som ti to vysvetlovat, tak sa hupo nepytaj v #12.
tiso
Profil
peta teraz neviem či si ma nepochopil, alebo nechápem ako to myslíš...
Chamurappi
Profil
Reaguji na peta:
Presne takyto pristup odhana uzivatelov fora :)
Přestaň pořád moralizovat, to ty jsi tady otravný hmyz.
Pravidla hovoří jasně: Jestliže odpovídáte odkazem, uveďte prosím několika slovy, kam míří.
Toto téma je uzamčeno. Odpověď nelze zaslat.