Mam taki XML:
<users> <id>103</id> <name>STE\/E</name> <teamid>189</teamid> <team>SETI.USA</team> <challenge_credit>9000570</challenge_credit> </user> <user> <id>59181</id> <name>Ross*</name> <teamid>1596</teamid> <team>Sicituradastra.</team> <challenge_credit>6998196</challenge_credit> </user> <user> <id>47984</id> <name>Firas Masri</name> <teamid>2146</teamid> <team>Hayrabedian & Associates</team> <challenge_credit>461827</challenge_credit> </user> </users>
Gdy próbuję go wczytać za pomocą XMLReader przy pomocy takiego kodu:
$reader = new XMLReader(); //sciezka $reader->open('../../tpstat/projekty/PrimeGridW/'.$dzisiaj.'/challenge_users.xml'); $count=0; while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT) { $name = $reader->name; if ($reader->name == 'user') { } } if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA) { } if($reader->nodeType == XMLReader::END_ELEMENT) { if ($reader->name == 'user') { $count++; } } }
oczywiście po dojściu do znaku & wywala mi się.
Wypisując błędy:
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 Warning: XMLReader::read() [xmlreader.read]: <team>Hayrabedian & Associates</team> in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55 Warning: XMLReader::read() [xmlreader.read]: ^ in F:\xampp\htdocs\tpstat\skryptypobierajacew\PrimeGrid.php on line 55 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
while($reader->read())
a linia 1274 to
<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
jest
&
.
&
W jaki sposób sobie z tym poradzić. Gdy ręcznie podmieniłem
na
&
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ć"
na
&
w ciągu
&
tak aby XMLReader się nie wysypywał. To samo dotyczy innych zabronionych znaków wymienionych tutaj link.
Hayrabedian & Associates
No i jak postąpić gdy dajmy na to część znaków w pliku jest poprawnie zamieniona na
, żeby po podmianie nie wyszło nam
&
&& albo &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...