[ darence @ 14.05.2009. 13:42 ] @
Pozdrav svima.

Potrebno je XML dokument prikazati nekako ovako



To sam uspeo, ali nikako da sredim da na klik pastera dobijem alert sa nekom vrednoscu, recimo marka, godiste ili slicno, za vozilo koje je u tom redu.
Evo xml-a
Code:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="AutoKatalog.xsl"?>
<automobili>
  <auto>
    <id>1</id>
    <marka>Fiat</marka>
    <model>Punto</model>
    <godiste>2005</godiste>
  </auto>
  <auto>
    <id>2</id>
    <marka>Zastava</marka>
    <model>Koral In</model>
    <godiste>2007</godiste>
  </auto>
  <auto>
    <id>3</id>
    <marka>Hyundai</marka>
    <model>Getz</model>
    <godiste>2003</godiste>
  </auto>
  <auto>
    <id>4</id>
    <marka>Lada</marka>
    <model>Niva</model>
    <godiste>2002</godiste>
  </auto>
</automobili>


Izgled sa slike sam postigao sa

Code:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
      <html>
        <head>
          <script language="javascript" src="script.js">
          </script>
        </head>
        <body>
          <h2>Auto Katalog</h2>
          <table>
            <tr>
              <th width="150">Marka</th>
              <th width="150">Model</th>
              <th width="150">Godiste</th>
              <th>Alert</th>
            </tr>
          <xsl:for-each select="automobili/auto">
            <tr align="center">
                <td>
                  <xsl:value-of select="marka"></xsl:value-of>
                </td>
                <td>
                  <xsl:value-of select="model"></xsl:value-of>
                </td>
                <td>
                  <xsl:value-of select="godiste"></xsl:value-of>
                </td>
          <!--    <td>
                <input type="button" onClick='pokazi();' value='Klikni' ></input>
                
              </td>
          -->
              
            </tr>
          </xsl:for-each>
            
          </table>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>



medjutim, nikako da pogodim javascript da odradi alert. Probao sam

Code:
function pokazi(redBr)
{
xmlDoc=loadXMLDoc("AutoKatalog.xml");
godisteCvor=xmlDoc.getElementsByTagName("godiste")[0];
godiste=godisteCvor.childNodes[0];
alert(godiste.nodeValue;)
}


Sad ce neko reci da se funkcija poziva bez argumenta, a ovamo ga ima. To mi i jeste problem, kako proslediti argument funkciji :(

Ovo sam uradio vodeci se tutorijalom sa W3 schools, ali slabo mi ide. Ceo problem se pojavio kada je asistent na vezbama presao ceo XML za dva casa, i niko nista nije ukapirao, osim da se zahteva da se XML podaci prikazu kao na slici, i da se klikom na taster javi alert sa nekim podatkom o konkretnom (ovde) vozilu.

I jos jedan problem je sto u IE-u sve izgleda kao na slici, a u Firefox-u se sve prikazuje u jednom redu.

Molim vas za pomoc oko ovoga, ili bar za linkove sa kojih moze da se nauci sta i kako uraditi. Vec 4 dana nas troje kolega pokusavamo nesto da saznamo, ali nam ne ide.

Hvala unapred na utrosenom vremenu i trudu
[ escape... @ 18.05.2009. 04:44 ] @
Citat:
Sad ce neko reci da se funkcija poziva bez argumenta, a ovamo ga ima. To mi i jeste problem, kako proslediti argument funkciji :(

Kako ? Lako :) - samo stavi id unutar vitičastih zagrada, ovako:

Code:
 <input type="button" onClick='pokazi({id});' value='Klikni' ></input>

i time si prosledio funkciji id tekućeg reda, tj. XML čvora.

Citat:
I jos jedan problem je sto u IE-u sve izgleda kao na slici, a u Firefox-u se sve prikazuje u jednom redu.

Nijedan normalan browser ne može to lepo da prikaže, pa je problem u IE-u. ;) Probaj da promeniš:

Code:
<xsl:output method="xml" indent="yes"/>

u
Code:
<xsl:output method="html" indent="yes"/>


Evo i js funkcije:
Code:

function pokazi(redBroj){
    xmlDoc=loadXMLDoc("AutoKatalog.xml");
    var autoCvorovi = xmlDoc.getElementsByTagName("auto");
    for (i=0; i<autoCvorovi.length; i++){
    var autoCvor = autoCvorovi[i];
    var id = autoCvor.getElementsByTagName("id")[0].childNodes[0].nodeValue;
    if (id == redBroj){
       var marka = autoCvor.getElementsByTagName("marka")[0].childNodes[0].nodeValue;
       var model = autoCvor.getElementsByTagName("model")[0].childNodes[0].nodeValue;
       var godiste = autoCvor.getElementsByTagName("godiste")[0].childNodes[0].nodeValue;
       alert("Marka: " + marka + "\nModel: " + model + "\nGodiste: "+ godiste );
    }
  }
}

Trebalo bi da radi, pod uslovom da je dobra funkcija loadXMLDoc().

A iz čega ti trebaju materijali? XSLT ili XML u JavaScriptu?

Pozdrav
[ darence @ 18.05.2009. 09:09 ] @
Hvala.

Znas kako, trebaju mi materijali za XML i XSLT za neki recimo osnovni nivo znanja, koji bi bio dovoljan da se polozi kolokvijum. Naucio sam dosta stvari iz XSLT-a, ali mi je ovo bio problem, a asistent nije bas raspolozen da objasnjava. Presao je celo gradivo iz drugog semestra za jedan dvocas.

No, da ne davim sa tim, resio sam problem sa
Code:
<xsl:variable name="var_name">
                  <xsl:value-of select="godiste"/>
                </xsl:variable>
                <input type="button"  onClick=' alert({$var_name});' value='Klikni' ></input>


A sad jos jedno pitanjce. Kazes "pod uslovom da je dobra f-ja loadXMLDoc()" . Ja sam bio shvatio da je to standardna javascript f-ja :)

Sto se tice prikaza u IE i FF, resio sam to izbacivanjem jedne linije koda koju mi je Visual C++ 2008 sam ubacio pri kreiranju fajla, ali sad pojma nemam sta je pisalo. Spominjao se Microsoft, pa kako Firefox nije njihov dodjoh na ideju da to izbacim. I gle cuda, sad se isto vidi i u IE i u FF
[ escape... @ 18.05.2009. 22:59 ] @
Što se tiče materijala za XML, ne znam koliko vam treba za kolokvijum, ali uvek možeš da probaš: http://www.w3schools.com (http://www.w3schools.com/xml/default.asp za osnove XML-a, http://www.w3schools.com/xsl/default.asp za XSLT itd.). Tu imaš i neke alate za online vežbanje.

Evo i nekih materijala sa FON-a vezanih, pre svega, za XSLT i XPATH: http://iis.fon.rs/SlajdoviPredavanja/XSLT.zip i http://iis.fon.rs/SlajdoviVezbe/XSLT.zip (ovaj drugi je na srpskom, ako to igra neku ulogu).

Naravno, uvek možeš na zvaničan site svemoćnog tvorca: www.w3.org , ali ja nekako mislim da je http://www.w3schools.com daleko user-friendly-je rešenje.

Citat:
A sad jos jedno pitanjce. Kazes "pod uslovom da je dobra f-ja loadXMLDoc()" . Ja sam bio shvatio da je to standardna javascript f-ja :)

Pa, u neku ruku jeste standardna - nađeš na Web-u i copy-paste-uješ. ;) Standardne su funkcije load() i loadXML() (load() je za učitavanje i parsiranje fajla koji sadrži XML, a loadXML() za učitavanje i parsiranje xml-a iz teksta (stringa) u XML obliku). Neka od njih se poziva u loadXMLDoc(). U osnovi, loadXMLDoc() treba da omogući čitanje i parsiranje za različite browser-e, tj. parsere koje browser-i koriste.

Evo, npr., jedne moguće implementacije funkcije loadXMLDoc():
Code:

function loadXMLDoc(imeXMLFajla)
{
  var xmlDoc;
  try //Internet Explorer
  {
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
  catch(e)
  {
    try //Firefox, Mozilla, Opera, etc.
    {
       xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e)
    {
      alert(e.message);
      return xmlDoc;
    }
  }
  xmlDoc.async=false;
  xmlDoc.load(imeXMLFajla);
  return xmlDoc;
}

Naravno, ovo je moguće realizovati i drugačije, npr. da xmlDoc ne bude lokalna varijabla, te da funkcija ne vraća ništa (jer operiše direktno nad globalnom varijablom) ili, npr., da ne prihvata ime file-a kao parametar. U krajnjem slučaju, funkciju uopšte nismo morali ovako nazvati, je li :).

A što se tiče ovog drugog načina za uspešno prikazivanje u browser-u, nisam sigurna da znam o čemu se tu tačno radi, tako da bi tu neko iskusniji trebalo da stupi na scenu. :)
[ darence @ 19.05.2009. 09:02 ] @
Hvala ti za linkove sa FON-a, ali upravo u tom grmu lezi zec !. Neces verovati, nama je profesor na predavanjima pustao ISTE ove slajdove, ali potpuno iste, samo sa pricom da je on autor i naravno izbacio je poslednji slajd. Ne mogu da verujem kako ljudi zaradjuju platu.... Sad mi je u neku ruku i jasno zasto covek nema resenje ponekad kad kod sa slajda ne radi :)
[ escape... @ 22.05.2009. 00:59 ] @
Heh, sjajno. :)

U principu, nemam ništa protiv uzimanja tuđih materijala, ako su zaista dobri, sve dok se zna da su tuđi.
Ali, istina je da je fušeraj u školstvu uzeo maha, i u slučaju FON-a mogla bih o tome satima. Često se zapitam o motivima ljudi koji predaju na fakultetu, i na kraju dolazim do poražavajućeg zaključka da tu svega (sujete, želje za titulom, novcem, moći i sl.) ima, nego želje za znanjem, i prenošenjem znanja.
No, iako ćeš verovatno videti još svašta, neka te ne opterećuje preterano, jer kapitalizam ipak voli sposobne, znanjem opskrbljene ljude. A to ne stičeš nužno na fakultetu, iako bi možda trebalo.