Witajcie!
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')
{
$notes[$count] = array(); }
}
if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA)
{
$notes[$count][$name] = trim($reader->value); }
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
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
&
, ż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/statsA omawiany problem, powstrzymuje mnie przed dodaniem statystyk wyścigowych...
Ten post edytował TomaszPawel 20.12.2011, 13:16:57