Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> XML z niedozwolonymi znakami typu &, Jak można odczytać taki plik za pomocą XMLReader
TomaszPawel
post 20.12.2011, 12:12:02
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.03.2011
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Witajcie!

Mam taki XML:

  1. <users>
  2. <id>103</id>
  3. <name>STE\/E</name>
  4. <teamid>189</teamid>
  5. <team>SETI.USA</team>
  6. <challenge_credit>9000570</challenge_credit>
  7. </user>
  8. <user>
  9. <id>59181</id>
  10. <name>Ross*</name>
  11. <teamid>1596</teamid>
  12. <team>Sicituradastra.</team>
  13. <challenge_credit>6998196</challenge_credit>
  14. </user>
  15. <user>
  16. <id>47984</id>
  17. <name>Firas Masri</name>
  18. <teamid>2146</teamid>
  19. <team>Hayrabedian & Associates</team>
  20. <challenge_credit>461827</challenge_credit>
  21. </user>
  22. </users>


Gdy próbuję go wczytać za pomocą XMLReader przy pomocy takiego kodu:

  1. $reader = new XMLReader();
  2.  
  3. //sciezka
  4. $reader->open('../../tpstat/projekty/PrimeGridW/'.$dzisiaj.'/challenge_users.xml');
  5.  
  6. $count=0;
  7.  
  8. while($reader->read())
  9. {
  10. if($reader->nodeType == XMLReader::ELEMENT)
  11. {
  12. $name = $reader->name;
  13.  
  14. if ($reader->name == 'user')
  15. {
  16. $notes[$count] = array();
  17. }
  18. }
  19.  
  20. if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA)
  21. {
  22. $notes[$count][$name] = trim($reader->value);
  23. }
  24.  
  25. if($reader->nodeType == XMLReader::END_ELEMENT)
  26. {
  27. if ($reader->name == 'user')
  28. {
  29. $count++;
  30. }
  31. }
  32. }


oczywiście po dojściu do znaku & wywala mi się.

Wypisując błędy:

  1. Warning: XMLReader::read() [xmlreader.read]: file:///F:/xampp/htdocs/tpstat/projekty/PrimeGridW/20111220/challenge_users.xml:1274: parser error : xmlParseEntityRef: no name in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55
  2.  
  3. Warning: XMLReader::read() [xmlreader.read]: <team>Hayrabedian & Associates</team> in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55
  4.  
  5. Warning: XMLReader::read() [xmlreader.read]: ^ in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55
  6.  
  7. Warning: XMLReader::read() [xmlreader.read]: An Error Occured while reading in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55


linia 55 w kodzie to
  1. while($reader->read())

a linia 1274 to
  1. <team>Hayrabedian & Associates</team>


Od dwóch dni próbuję sobie z tym poradzić i nie mogę... Nie mam wpływu na to, że w XMLu zamiast
  1. &amp
jest
  1. &
.

W jaki sposób sobie z tym poradzić. Gdy ręcznie podmieniłem
  1. &
na
  1. &amp
wszystko ziała jak talala... tylko, że ręczna zabawa odpada, bo pliczek XML ma być importowany automatycznie z serwera co 15 minut...

W jaki sposób "podmienić"
  1. &
na
  1. &amp
w ciągu
  1. Hayrabedian & Associates
tak aby XMLReader się nie wysypywał. To samo dotyczy innych zabronionych znaków wymienionych tutaj link.

No i jak postąpić gdy dajmy na to część znaków w pliku jest poprawnie zamieniona na
  1. &amp
, żeby po podmianie nie wyszło nam
  1. &amp;&amp;
  2. albo
  3. &amp;amp;


Programistą nie jestem, a bawię się w php dla frajdy...

Do tej pory wyprodukowałem coś takiego:

http://boinc.pl/stats

A omawiany problem, powstrzymuje mnie przed dodaniem statystyk wyścigowych...

Ten post edytował TomaszPawel 20.12.2011, 13:16:57
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 14:00