Problem z plikiem XML przy przetwarzaniu w simpleXML

 
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> PHP i bazy danych
Autor Wiadomość
masterix
@Administrator




Dołączył: 05 Gru 2004
Posty: 5071
Skąd: Poznań
Pomógł: 53

PostWysłany: 22-04-07 11:45 Zacytuj zaznaczone Odpowiedz z cytatem

Witam,

Mam kod, który mi przetwarza odpowiednio plik XML:
Kod:
  $xmlstr = new simpleXMLElement( 'products.xml', NULL, TRUE );
  mysql_connect( 'localhost', 'root', '' );
  mysql_select_db( 'zlecenia' );
 
  foreach( $xmlstr -> product as $product )
  {
    $id = $product['id'];
    $number = $product['number'];
    $aff_prog = $product -> affiliateprogram['id'];
    $name = $product -> info -> name;
    $description = $product -> info -> description;
    $manufacturer = $product -> info -> manufacturer;
    $ship_cost = $product -> info -> shippinghandling['cost'];
    $category = $product -> category -> merchant;
    $deeplink = $product -> links -> deeplink;
    $image_small = $product -> links -> image[0] -> url;
    $image_medium = $product -> links -> image[0] -> url;
    $state = $product -> state;
    $date = $product -> date;
    $cost = $product -> offer -> currentprice;
  // itd
  }
I pojedynczy element z pliku XML:
Kod:
<product id="877175458" number="57873">

 <affiliateprogram id="1493" />

 <info>

  <name>VITAMAG + CYNK + POTAS TABLETKI DO SSANIA MALINOWE</name>

  <description state="short">Preparat przeznaczony jest dla osób dorosłych jako uzupełnienie niedoborów cynku, potasu, magnezu i witaminy B6 w codziennej diecie. Cynk bierze udział w wytwarzaniu prostaglandyn regulujšcych ciœnienie krwi, rytm pracy serca, funkcje wydzielnicze skóry, czy poziom cholesterolu we krwi. W połšczeniu z magnezem i witaminš B6 wpływa na prawidłowe funkcjonowanie układu odpornoœciowego oraz przeciwdziała nadpobudliwoœci i zaburzeniom koncentracji. Potas umożliwia prawidłowe funkcjonowanie układu nerwowegoi mięœ</description>

  <manufacturer>POLFARMEX</manufacturer>

  <shippinghandling cost="6.50" />

 </info>

 <category>

  <merchant>Dieta</merchant>

 </category>

 <links>

  <deeplink>http://ad.zanox.com/ppc/?5708908C1403250192&ULP=[[http://www.domzdrowia.pl/?nr_seller=30&productid=57873]]</deeplink>

  <image state="small">

  <url>http://www.domzdrowia.pl/img/73/57873.jpg</url>

  </image>

  <image state="medium">

  <url>http://www.domzdrowia.pl/img/73/57873b.jpg</url>

  </image>

 </links>

 <state>1</state>

 <date state="update">2007-04-16T22:13:00</date>

 <offer>

  <currentprice currency="PLN">11.66</currentprice>

 </offer>
</product>
Bólu głowy przysparza mi element <deeplink>, dostaję taki komunikat:
Cytat:
Warning: SimpleXMLElement::__construct() [function.--construct]: products.xml:15: parser error : EntityRef: expecting ';' in /home/masterix/public_html/xml2mysql.php on line 4

Warning: SimpleXMLElement::__construct() [function.--construct]: <deeplink>http://ad.zanox.com/ppc/?5708908C1403250192&ULP=[[http://www.domzdro in /home/masterix/public_html/xml2mysql.php on line 4

Warning: SimpleXMLElement::__construct() [function.--construct]: ^ in /home/masterix/public_html/xml2mysql.php on line 4

Warning: SimpleXMLElement::__construct() [function.--construct]: products.xml:15: parser error : EntityRef: expecting ';' in /home/masterix/public_html/xml2mysql.php on line 4

Warning: SimpleXMLElement::__construct() [function.--construct]: m/ppc/?5708908C1403250192&ULP=[[http://www.domzdrowia.pl/?nr_seller=30&productid in /home/masterix/public_html/xml2mysql.php on line 4

Warning: SimpleXMLElement::__construct() [function.--construct]: ^ in /home/masterix/public_html/xml2mysql.php on line 4

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/masterix/public_html/xml2mysql.php:4 Stack trace: #0 /home/masterix/public_html/xml2mysql.php(4): SimpleXMLElement->__construct('products.xml', 0, true) #1 {main} thrown in /home/masterix/public_html/xml2mysql.php on line 4
Jednak jak wywalę tą linijkę z pliku XML to całość działą wyśmienicie... Co jest grane ? Nie jarzę jak może się nagle wysypywać cały skrypt po dodaniu jednej linijki.

pzdr.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
reborn
~user




Dołączył: 10 Lip 2005
Posty: 1312

Pomógł: 20

PostWysłany: 22-04-07 12:15 Zacytuj zaznaczone Odpowiedz z cytatem

Imho simpleXML nie może sobie poradzić ze sprarsowaniem tego fragmentu Wink No chyba że występują tam jakieś błędy składniowe...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG Jabber
masterix
@Administrator




Dołączył: 05 Gru 2004
Posty: 5071
Skąd: Poznań
Pomógł: 53

PostWysłany: 22-04-07 12:28 Zacytuj zaznaczone Odpowiedz z cytatem

Tylko właśnie dlaczego nie może sobie poradzić? Przeciez to jest zwykły tekst pomiędzy dwoma znacznikami tak samo jak np pomiędzy <manufacturer> i </manufacturer>

Może te 'krzaczki' w adresie mu przeszkadzają albo coś... ?
reborn napisał:
No chyba że występują tam jakieś błędy składniowe...

Problem w tym, że plik jest udostępniany przez jakiś sklep i jeśli faktycznie występują ( w co wątpię ) to nie mam możliwości ingerencji w to

pzdr.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
mrKrecik
@Administrator




Dołączył: 30 Sty 2005
Posty: 1428
Skąd: czerpać siły?
Pomógł: 10

PostWysłany: 22-04-07 12:40 Zacytuj zaznaczone Odpowiedz z cytatem

A może umieść te "krzaczki" między:
Kod:
<![CDATA[ ... ]]>

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Numer GG
reborn
~user




Dołączył: 10 Lip 2005
Posty: 1312

Pomógł: 20

PostWysłany: 22-04-07 12:59 Zacytuj zaznaczone Odpowiedz z cytatem

A właśnie, to przez nie, simpleXML się gubi. A mrKrecik dobrze prawi...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG Jabber
masterix
@Administrator




Dołączył: 05 Gru 2004
Posty: 5071
Skąd: Poznań
Pomógł: 53

PostWysłany: 22-04-07 13:30 Zacytuj zaznaczone Odpowiedz z cytatem

mrKrecik napisał:
A może umieść te "krzaczki" między:


masterix napisał:
nie mam możliwości ingerencji w to


I które dokładnie krzaczki w to wrzucić ? To ew. pobawię się preg'ami chociaż mi się to nie widzi, bo wydłuży działanie skryptu...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
reborn
~user




Dołączył: 10 Lip 2005
Posty: 1312

Pomógł: 20

PostWysłany: 22-04-07 14:32 Zacytuj zaznaczone Odpowiedz z cytatem

Wrzuć zawartość <deeplink> do CDATA
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG Jabber
masterix
@Administrator




Dołączył: 05 Gru 2004
Posty: 5071
Skąd: Poznań
Pomógł: 53

PostWysłany: 22-04-07 16:59 Zacytuj zaznaczone Odpowiedz z cytatem

Pomogło, dzięki Smile
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Omen
~user




Dołączył: 12 Lis 2005
Posty: 1425
Skąd: Warszawa
Pomógł: 1

PostWysłany: 23-04-07 14:00 Zacytuj zaznaczone Odpowiedz z cytatem

---------- 12:27 23.04.2007 ----------

Ale zabawka Smile ja zawsze robiłem wszystko przez DOM-a Smile nie wiedziałem ze istnieje taka klasa jak SimpleXMLElement Very Happy

--------
czemu ma sluzyc taki post? nie wnosi nic do ulepszenia rozwiazania, ani nie wprowadza zadnych nowych watpliwosci/pytan to nie hydepark zeby pisac bezsensowne posty. nastepnym razem del bez uprzedzania.
Chester z LPR-u


---------- 13:00 ----------

Jak to ? ze nie trzeba koniecznie korzystać z tej metody, ze mozna takze zastosowac DOM-a Smile ale okey jak chcesz mozesz usunąć :p

_________________


Ostatnio zmieniony przez Omen dnia 24-04-07 00:39, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Tlen
reborn
~user




Dołączył: 10 Lip 2005
Posty: 1312

Pomógł: 20

PostWysłany: 23-04-07 14:00 Zacytuj zaznaczone Odpowiedz z cytatem

Pozwole sobie odpowiedzieć Omenowi - rozszerzenie nazywa się SimpleXML, ale jest też np. xmlwriter i xmlreader. I DOM. Więc wybór jest nie mały. EOT.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG Jabber
Wyświetl posty z ostatnich:   
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> PHP i bazy danych Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

Mapa
Powered by phpBB © 2001, 2005 phpBB Group

 Polecane strony