Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z parsowaniem XMLa
Forum PHP.pl > Forum > XML, AJAX > AJAX
chomiczek
witam, pobrałem sobie przykład numer 2 z advajax'a (ten gdzie jest dynamiczna tabela), generuje sobie XMLa i o ile pod IE jest ok, to pod FF mam dziwne błedy, pierwszy w firebug'u to:
  1. record[i].childNodes[j].childNodes[0] has no properties
  2. [Break on this error] alert(record[i].childNodes[j].childNodes[0].nodeValue);


idąc dalej i sprawdzając w firebugu record (w watch) otrzymuje dziwne wg. mnie wartości (chodzi o wartości childNodes:
  1. "\n ", idp, "\n ", 6 more...
to fragment, ale chodzi o to, że co druga pozycja to \n, kod to poniżej listingi js i PHP

[html]<script language="javascript" type="text/javascript">
<!-- <![CDATA[
function $(parametr){
return document.getElementById(parametr);
}

function parseRecords(xml) {
startId = 1;

record = xml.getElementsByTagName("producent");
result = "";

for (i = 0; i < record.length; i++) {

for (j = 0; j < 3; j++) {

alert(record[i].childNodes[j].childNodes[0].nodeValue);

} }
return result;
}

function prezzo(p) {

advAJAX.setDefaultParameters({
onSuccess : function(obj) {
alert(obj.responseText);
parseRecords(obj.responseXML);

}
});

advAJAX.get({ url: "edtCat.php", tag: "big" });
}
// ]]> -->
</script>

a kod PHP generujący xmla wygląda tak:
  1. <?php
  2. require_once 'connect.php';
  3. $dom = new DOMDocument("1.0");
  4. $dom->formatOutput = true;
  5. $root = $dom->createElement('producenci');
  6. $dom->appendChild( $root );
  7.  
  8. $pyt = mysql_query("SELECT p.ProducentNazwa, p.ProducentId, k.PartNazwa, k.PartId
  9. FROM Producent as p, part as k
  10. WHERE p.PartId = k.PartId
  11. ORDER BY p.ProducentNazwa
  12. ");
  13.  
  14.  
  15.  
  16. while ($zap = mysql_fetch_array($pyt)) {
  17. $an = $dom->createElement('producent');
  18. $idP = $dom->createElement('idP',$zap[1].'a');
  19. $nazwaP = $dom->createElement('prodNazwa',$zap[0]);
  20. $id = $dom->createElement('id',$zap[3]);
  21. $nazwa = $dom->createElement('nazwa',$zap[2]);
  22. $an->appendChild($idP);
  23. $an->appendChild($nazwaP);
  24. $an->appendChild($id);
  25. $an->appendChild($nazwa);
  26. $root->appendChild( $an );
  27. }
  28.  
  29. header( "Content-type: text/xml" );
  30. echo $dom->saveXML();
  31. ?>


kod wyświetlający jest tutaj:
http://system.promediapc.pl/edtcategory.php
a plik tworzący XMLa tu: http://system.promediapc.pl/edtCat.php

Proszę o pomoc.
TomASS
A dlaczego to nie jest poprawny plik XML ? :/
klik :/
chomiczek
no właśnie.. przecież utworzony plik wydaje się być prawidłowy, a w samym kodzie nie widzę błedów. :/
TomASS
A jest wysyłany z odpowiednimi nagłówkami?
np:
  1. header("Content-type: text/xml; charset=UTF-8");
  2. echo '<?xml version="1.0" encoding="UTF-8"?>';
chomiczek
w tej chwili dla pewności poprawiłem nagłówki, upewniłem się czy kodowanie jest ok, link który podesłałeś zwraca mi:
  1. Column: 14
  2. Error: Can not find declaration of element 'producenci'.
  3. Error Position: <producenci>


Zawartość pliku XML:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <producenci>
  3.  <producent>
  4.    <idP>1a</idP>
  5.    <prodNazwa>Firma ABC</prodNazwa>
  6.    <id>1</id>
  7.    <nazwa>Podeszwy</nazwa>
  8.  </producent>
  9.  <producent>
  10.    <idP>2a</idP>
  11.    <prodNazwa>Firma DEF</prodNazwa>
  12.    <id>1</id>
  13.    <nazwa>Podeszwy</nazwa>
  14.  </producent>
  15.  <producent>
  16.    <idP>3a</idP>
  17.    <prodNazwa>Firma GHI</prodNazwa>
  18.    <id>1</id>
  19.    <nazwa>Podeszwy</nazwa>
  20.  </producent>
  21.  <producent>
  22.    <idP>4a</idP>
  23.    <prodNazwa>Firma JKL</prodNazwa>
  24.    <id>1</id>
  25.    <nazwa>Podeszwy</nazwa>
  26.  </producent>
  27.  <producent>
  28.    <idP>6a</idP>
  29.    <prodNazwa>test1</prodNazwa>
  30.    <id>3</id>
  31.    <nazwa>Skóra</nazwa>
  32.  </producent>
  33.  <producent>
  34.    <idP>5a</idP>
  35.    <prodNazwa>test1</prodNazwa>
  36.    <id>1</id>
  37.    <nazwa>Podeszwy</nazwa>
  38.  </producent>
  39. </producenci>
TomASS
Spróbuj tego validatora.

Po pierwsze spróbuj wywalić:
  1. <?xml version="1.0" encoding="UTF-8"?>

A później wywal wszystkie polskie znaczki:
  1. <nazwa>Skóra</nazwa>

Albo wstaw je w:
  1. <nazwa><![CDATA[Skóra]]></nazwa>


smile.gif
chomiczek
Hmm.. no w tym drugim walidatorze jest ok
  1. Congratulations the XML is well formed!


dostaje taką odpowiedź z firebug'a
  1. record[i].childNodes[j].childNodes[0] has no properties
  2. parseRecords(Document )edtcategory.php (line 41)
  3. onSuccess(Object url=edtCat.php?_uniqid=207638438 method=GET)edtcategory.php (line 56)
  4. raiseEvent("Success")advajax.js (line 374)
  5. _onComplete()advajax.js (line 185)
  6. onreadystatechange()advajax.js (line 126)
  7. [Break on this error] alert(record[i].childNodes[j].childNodes[0].nodeValue);


:/
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.