Citanje XML-a

Dakle imam jednu jednostavnu skriptu

Skripta radi odlično, i normalno ispisuje sadrzaj xml-a, sve dok ne naleti na & u xml fileu. Tada mi vraca gresku:

Warning: DOMDocument::load() [domdocument.load]: xmlParseEntityRef: no name in
http://link.xml
, line: 97

Ovako mi izgleda jedan unos u rss-u

<url> 
<loc>http://www.adresa.com/naslov-necega-blabla</loc> 
<name>neki naslov</name> 
<id>32846</id> 
<lastmod>2010-09-15</lastmod> 
 </url> 

A greska se pojavi ako skripta naleti na nesto ovako

<url> 
<loc>http://www.adresa.com/naslov-[B]&[/B]-necega-blabla</loc> 
<name>neki naslov</name> 
<id>32846</id> 
<lastmod>2010-09-15</lastmod> 
 </url> 

Ima li tko ideju kako da to sredim?

skini najnoviju verziju tog xml parsera.

Ja sam probao sve moguče parsere na koje sam naletio, i pokušao sa pretvaranjem tih znakova koji ruše xml.
I na kraju odustao od svega i napravio svoj parser preko regexa/array.
Koliko god se bio trudio pokriti sve uvijek bi se našao neki rss koji bi srušio rss.

Neki (dosta njih) često ubacuju html kod pa s encodiranjem ti se njihov html prikazuje na stranici ali neka kao html element već tekst.

Probaj rss izvaditi kao običnu stranicu i naći neki parser u php za html (DOM), mislim da on nebi trebao imati problema s time. Vjerovatno sam i to probao ali sam zaboravio zašto sam od toga odustao. Možda nešto s CDATA koji zna biti unutar nekog rss elementa.

I na kraju to nisu jedini problemi, tu je i encoding. Zatim različiti načini prikaza istih podatka, pa si polomiš zube preko tuđih parsera da izvadiš ono što želiš.

RSS obavezno loadirati preko curl ili neke druge tehnologije za dovat stranice jer neki parseri imaju mogučnost dohvata ali to mi u većini slučajeva nije radilo, jer ako je xml nevalidan odmah ga sruši.

[quote=“gorrc”]Ja sam probao sve moguče parsere na koje sam naletio, i pokušao sa pretvaranjem tih znakova koji ruše xml.
I na kraju odustao od svega i napravio svoj parser preko regexa/array.
Koliko god se bio trudio pokriti sve uvijek bi se našao neki rss koji bi srušio rss.

Neki (dosta njih) često ubacuju html kod pa s encodiranjem ti se njihov html prikazuje na stranici ali neka kao html element već tekst.

Probaj rss izvaditi kao običnu stranicu i naći neki parser u php za html (DOM), mislim da on nebi trebao imati problema s time. Vjerovatno sam i to probao ali sam zaboravio zašto sam od toga odustao. Možda nešto s CDATA koji zna biti unutar nekog rss elementa.

I na kraju to nisu jedini problemi, tu je i encoding. Zatim različiti načini prikaza istih podatka, pa si polomiš zube preko tuđih parsera da izvadiš ono što želiš.

RSS obavezno loadirati preko curl ili neke druge tehnologije za dovat stranice jer neki parseri imaju mogučnost dohvata ali to mi u većini slučajeva nije radilo, jer ako je xml nevalidan odmah ga sruši.[/quote]

Da li si ikad probao koristiti simplepie?

http://simplepie.org

Odmah da i autoru ovog posta prepotučim pogledati dotični link.

[quote=“CreatifCode”]Da li si ikad probao koristiti simplepie?

http://simplepie.org

Odmah da i autoru ovog posta prepotučim pogledati dotični link.[/quote]

nisam, izgleda močno, isprobao sam neke problematične feedove i radi:klanjamse

malo ću detaljnije to opteretiti pa da vidim šta će biti.

Ovo je vjerovatno rjesenje, jer meni gornji primjer radi bez problema.

SimplePie je malo prevelika i opširna skripta za ovo što meni treba. Dakle ja tražim nešto jednostavno što će čitati uvijek isti feed. Ovaj moj primjer radi savršeno samo što ga ruši &.

Jel moguće kako nadograditi ovaj moj kod da preskoči te upise u kojima ima taj znak što ga ruši, ili još bolje da jednostavno samo zanemari taj znak i ispiše bez njega.

Znači izgled feeda je uvijek isti, ne treba mi skripta koja će čitati različite, nego uvijek taj jedan i samo za njega treba biti prilagođena.

Evo kako izgleda feed.

[HTML]

http://www.link.com/neka-stranica-1.html Naziv prvog upisa 46966 2010-09-16 http://www.link.com/neka-stranica-1.html Naziv drugog upisa 46644 2010-09-16 http://www.link.com/neka-stranica-1.html Naziv treceg upisa 46608 2010-09-16 [/HTML]

Ako kod nije prevelik, možete i napisati novi kod koji će uzeti ovaj feed i ispisati to u recimo sljedećem formatu.

[HTML]
Naziv prvog upisa

[quote="’<[cyber"]>]Ovaj moj primjer radi savršeno samo što ga ruši &.

Jel moguće kako nadograditi ovaj moj kod da preskoči te upise u kojima ima taj znak što ga ruši, ili još bolje da jednostavno samo zanemari taj znak i ispiše bez njega.
[/quote]

Problem je najvjerovatnije u verziji parsera koji koristis, cini mi se da ima bug sto se tice tog znaka, koji se potpuno validan u XML-u!
Isprobaj skriptu na novijoj verziji tog parsera, meni radi bez problema.

Osim toga, mozes probati i sa SimpleXML-om, meni on inace sasvim dobro radi.

I btw, logika “kud svi tud i mali Mujo” vam nije bas valjana! :smiley:

O kvaliteti neću ni pričati ali trebalo bi raditi:)

Odlično ovo će mislim pomoći, ako gdje zapnem javim se…

Hvala

[quote=“gorrc”]O kvaliteti neću ni pričati ali trebalo bi raditi:)

Pokušavam sada sa ovim tvojim primjerom ispisati sadrzaj rss-a i dolazi mi do greske. Sad nisam vise siguran jel koristim dobro taj primjer.

Jesi ti ovo napisao kao nadogradnju onog mog primjera gore ili kao novu skriptu. Ja sam u varijablu $xml stavio url do RSS feeda, i jednostavno mi nista ne ispisuje.

Malo glupo pitanje, ali eto :krele:

@Gosaric

Na koji nacin mogu skiniti novu verziju tog xml parsera. Na što točno mislis? Možeš objasniti malo što bi trebao skiniti i gdje uploadati.

Znam da su glupa pitanja, ali nisam nikada radio sa rss-om i ovo je sve meni novo hehe :cool:

[quote="’<[cyber"]>]
Jesi ti ovo napisao kao nadogradnju onog mog primjera gore ili kao novu skriptu. Ja sam u varijablu $xml stavio url do RSS feeda, i jednostavno mi nista ne ispisuje.
[/quote]

ovako dobiš $xml varijablu

Eh da s ovim “preg_match(’/(.*)?(</loc>)/’, $x, $matches );” će se možda trebati malo poigrati:)


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja