Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie wczytuje mi elementów z XMLa :/
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
TomASS
Witam. Ordazu zaznaczam, że na XMLu znam się jak na dojeniu kaczek, czyli wogóle tongue.gif (podobnie zresztą jak na JS). Mam taki oto sobie plik XML:

  1. <?xml version="1.0" ?>
  2. <records total="11" count="10" max_per_page="10" page="0">
  3. <record>
  4. <iduser>2</iduser>
  5. <login>jorge</login>
  6. <senha>oxe</senha>
  7. <email>jorge@icorp.com.br</email>
  8. <nome>Fernando Jorge</nome>
  9. <fone>439-9148</fone>
  10. <celular>9292-2664</celular>
  11. <admin>0</admin>
  12. <grupo>Produçăo</grupo>
  13. <dataace>0000-00-00 00:00:00</dataace>
  14. <endereco />
  15. <ramal />
  16. <fonecasa />
  17. <valorhora>0.00</valorhora>
  18. <horasc>0.00</horasc>
  19. <alimentacao>0.00</alimentacao>
  20. <transporte>0.00</transporte>
  21. <ativo>0</ativo>
  22. </record>
  23. <record>
  24. <iduser>5</iduser>
  25. <login>itamar</login>
  26. <senha>itamac</senha>
  27. <email>itamar@icorp.com.br</email>
  28. <nome>Itamar Medeiros</nome>
  29. <fone>3247-1959</fone>
  30. <celular>9987-7082</celular>
  31. <admin>0</admin>
  32. <grupo>Produçăo</grupo>
  33. <dataace>31/08/2001 17:30:55</dataace>
  34. <endereco />
  35. <ramal>211</ramal>
  36. <fonecasa>3469-2168</fonecasa>
  37. <valorhora>4.50</valorhora>
  38. <horasc>8.00</horasc>
  39. <alimentacao>5.00</alimentacao>
  40. <transporte>3.00</transporte>
  41. <ativo>0</ativo>
  42. </record>
  43. </records>


mam to w obiekcjie DOM o nazwie responseXML
i teraz próbuje dać wywołanie:
  1. <script type="text/javascript">
  2. alert(record = responseXML.getElementsByTagName("records").item(0));

I alert wyswietla mi "null", jak dam bez item(0):
  1. <script type="text/javascript">
  2. alert(record = responseXML.getElementsByTagName("records"));

To wyświetla mi się [object]
Jak ma się dobrać do wartości total, count itp... oraz do tagów <records> questionmark.gif
Dzięki za odpowiedzi
nospor
hmmm, przenoszę na js. Masz problem z pobieraniem wartości w js, a że to xml to inna bajka winksmiley.jpg
revyag
getElementsByTagName zwraca tablicę elemtnów o określonym tagu, więc nie możesz się odwołać do elementu w sposób jak robisz.
Kod
record = responseXML.getElementsByTagName("records");
//wyświetl sobie co masz w tej tablicy, ułatwi Ci to sprawe
for(i = 0; i < record.length; i++) {
    alert(record[i]);
}
TomASS
Niestety nic mi nie wyświetli, bo

  1. alert(record.length);


Wyświetli 0 :/
dr_bonzo
record.item( i );
TomASS
A co za różnica skoro record.length = 0 i pętla nie wywoła się ani razu? Może to jest niepoprawy format XML - tylko jak to sprawdzić? Generuję go na podstawie php:
  1. <?
  2.  
  3. function convert($string){
  4.  return iconv("ISO-8859-2","UTF-8",$string);
  5. }
  6.  
  7. $dbhost = localhost;
  8. $dblogin = root;
  9. $dbhaslo = '';
  10. $db = uop;
  11. mysql_connect ("$dbhost","$dblogin","$dbhaslo") or die ("Nie masz uprawnien");
  12. mysql_select_db ("$db");
  13. $query = "SELECT * FROM users";
  14. $result = mysql_query($query);
  15.  
  16. echo '<?xml version="1.0" encoding="UTF-8"?><records total="'.mysql_affected_rows().'" count="10" max_per_page="10" page="20" size="">';
  17.  
  18. while ($row = mysql_fetch_assoc($result)){
  19. echo '<record>';
  20. while(list($Index,$Value)=each($row)){
  21.  echo '<'.$Index.'>'.convert($Value).'</'.$Index.'>';
  22. }
  23. echo '</record>';
  24. }
  25. echo '</records>';
  26.  
  27. ?>
dr_bonzo
Hm.. moze po prostu nie da sie wybrac "glownego" taga (records) - przeciez moze byc i tak tylko jeden, probowales wybrac 'record'? Nie mam jak teraz tego sprawdzic.
TomASS
Powinno sie dać wybrać głównego taga (records)
a wybierać record próbowałem :/

http://www.w3schools.com/dom/dom_validate.asp pokazuje, że dokument zgodny z XML :/
dr_bonzo
A dostajesz w opowiedzi ten XML? Sprawdzales to?, bo:
Kod
responseXML.getElementsByTagName("records")

zwraca DOMNodeList ktore moze nie zawietac nic (0 elementow).
A wybranie
Kod
responseXML.getElementsByTagName("records").item( 0 ) zwraca null
dla tego ze tam nic nie ma (moje przypuszczenie, moglo by tez generowac wyjatek)

Ale co by bylo gdybys nie otrzymal XMLa -- czy moglbys wywolac ..byTagName()?
TomASS
Cytat
A dostajesz w opowiedzi ten XML?

No właśnie nie wiem jak to sprawdzić :/

Cytat
Ale co by bylo gdybys nie otrzymal XMLa -- czy moglbys wywolac ..byTagName()?

Tak - mógłbym wywołać


Jeśli zamiast responseXML dam responseText to otrzymuję właśnie tego xml w postaci stringa :/


--------------------------------------------EDIT--------------------------------------
To tak, gdy wczytuje XML z "zewnątrz" to jest ok, np. z advajax.
Jednak nie wiem co robię nie tak generując swój (podobny do przykładowego) plik XML:
  1. <?
  2.  
  3. function convert($string){
  4.  return iconv("ISO-8859-2","UTF-8",$string);
  5. }
  6.  
  7. $dbhost = localhost;
  8. $dblogin = root;
  9. $dbhaslo = '';
  10. $db = uop;
  11. mysql_connect ("$dbhost","$dblogin","$dbhaslo") or die ("Nie masz uprawnien");
  12. mysql_select_db ("$db");
  13. $query = "SELECT * FROM users";
  14. $result = mysql_query($query);
  15.  
  16. echo '<?xml version="1.0" encoding="UTF-8"?><records total="'.mysql_affected_rows().'" count="10" max_per_page="10" page="20" size="">';
  17.  
  18. while ($row = mysql_fetch_assoc($result)){
  19.   echo '<record>';
  20.   while(list($Index,$Value)=each($row)){
  21.    echo '<'.$Index.'>'.convert($Value).'</'.$Index.'>';
  22.   }
  23.   echo '</record>';
  24. }
  25. echo '</records>';
  26.  
  27. ?>


To pewnie wina leży w generowaniu tego pliku:/
--------------------------------------------EDIT--------------------------------------
Problem został usunięty
Razem z micke_mechem wykumaliśmy, że należy wrzucić jakiegoś headera, a ten jakiś header to:
  1. <?php
  2.  
  3. header("Content-type: text/xml; charset=UTF-8"); 
  4.  
  5. ?>


Czyli całość generowanego pliku wyglądać powinna:
  1. <?
  2.  
  3. function convert($string){
  4.  return iconv("ISO-8859-2","UTF-8",$string);
  5. }
  6.  
  7. $dbhost = localhost;
  8. $dblogin = root;
  9. $dbhaslo = '';
  10. $db = uop;
  11. mysql_connect ("$dbhost","$dblogin","$dbhaslo") or die ("Nie masz uprawnien");
  12. mysql_select_db ("$db");
  13. $query = "SELECT * FROM users";
  14. $result = mysql_query($query);
  15.  
  16. header("Content-type: text/xml; charset=UTF-8"); 
  17. echo '<?xml version="1.0" encoding="UTF-8"?><records total="'.mysql_affected_rows().'" count="10" max_per_page="10" page="20" size="">';
  18.  
  19. while ($row = mysql_fetch_assoc($result)){
  20. echo '<record>';
  21. while(list($Index,$Value)=each($row)){
  22.  echo '<'.$Index.'>'.convert($Value).'</'.$Index.'>';
  23. }
  24. echo '</record>';
  25. }
  26. echo '</records>';
  27.  
  28. ?>


Dzięki micke, dzięki bonzo, dzięki all smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.