PHP XML Parser

Dakle treba da kroz php pristupim jednom html file-u koji je izdjeljen u divove koje znam kako se zovu, i da izvadim sve sto se nalazi unutar jednog diva npr. :

<div id = content>
ovdje je neki tekst
ovdje je neki tekst
ovdje je neki tekst
...
</div>

E sad na php manual sam nasao nekih funkcija ali mi je sve to nekako konfuzno jer nisam nikad to radio. Cackao sam neki XML Reader ali bez uspjeha (nisam razumio primjere) Asistent iz datog predmeta mi je rekao za “XML parser” a kako radi to sam da rijesim. Moze li neka pomoc oko ovog. Bar odakle da krenem. Imam iskustva u php-u ako ce to pomoci.

Nema php funkcija, al’ ima dobra klasa koja to radi :

http://simplehtmldom.sourceforge.net/

adioe3 ti je bog za php i elektrotehniku, priupitaj njega.

[quote=Bo]Nema php funkcija, al’ ima dobra klasa koja to radi :

http://simplehtmldom.sourceforge.net/[/quote]

Probacu ovo samo ne znam kako da uradim ne foreach nego tacno za jedan i samo jedan element. Posto ih moze biti istih naziva. Moze li preko id-a od div-a?

Nesto tipa foreach ($html->find(‘content’) as $element) onda ce naci samo jedan bez obzira sto je foreach jer nema istih id-ova. Mogao sam ovo isprobati dok sam otkucao ovaj post. :smiley:

[quote=boby][quote=Bo]Nema php funkcija, al’ ima dobra klasa koja to radi :

http://simplehtmldom.sourceforge.net/[/quote]

Probacu ovo samo ne znam kako da uradim ne foreach nego tacno za jedan i samo jedan element. Posto ih moze biti istih naziva. Moze li preko id-a od div-a?

Nesto tipa foreach ($html->find(‘content’) as $element) onda ce naci samo jedan bez obzira sto je foreach jer nema istih id-ova. Mogao sam ovo isprobati dok sam otkucao ovaj post. :D[/quote]

Sam si rekao :slight_smile:

on trazi sve elemente, foreach radi upravo ono sto sam kaze, ako imas jedan element onda gi ne koristis.

On the other side, pogledaj kod klase, pa ce ti stvari biti malo jasnije

Namjestio. Radi bas sto hocu sa:

<?php
include ('simple_html_dom.php');
// Create DOM from URL or file
$html = file_get_html('index.html');

foreach($html->find('div[id=content]') as $element) 
       echo $element. '<br>';
?>

There ya go :slight_smile:

Perl regex :smiley: Vedran i ja smo ljubitelji te dzidze:

Ovo je onako ofrlje iz glave, mozda treba malko cacnut :slight_smile:

Ne kontam, XML je xml, šta se tu ima izmišljati topla voda:

http://php.net/manual/en/book.simplexml.php

E da doslo je i do problema. U mom zadnjem postu sam napisao da navedena funkcija radi ok, ali je problem sledeci. Postoji dakle, index fajl sa jos par html dokumenata koji su medjusobno linkovani i sve to upakovano u neki css, dakle bez php-a. To je seminarski rad iz html-a jednog od studenata. Moj seminarski je da od svih studenata pokupim te seminarske i procitam parserom njihove linkove i to ubacim kod sebe u moj seminarski. e to sam napravio. ali mi je zadatak da postojece njiove linkove prepravim tako da kad se klikne na neki link, pozove se parser za taj link a ne sam taj link. E i to sad radi, ali vjerovali ili ne samo ako sadrzaj koji porsiram ne sadrzi navodnike (“dvostruke”). Tada se parser pogubi ili sta vec i isparsira sve linkove odjednom. Ukoliko sadrzaj nema navodnika sve radi kako treba. Danas sam sa asistentom vijecao 3h i skontali smo da je sigurno do navodnika. Sta da radim?

Mores li to isto objasnit sa kodnim primjerima?

ok sorry.

E ovako ovo neka je npr druga.html stranica koja sadrzi nesto ovako:

<div id = "content">
    <p id="h3"> Polo&#382aj ta&#269ke u ravni </p>
    
    <p id = "text">
     Odredimo polo&#382aj ta&#269ke \(M\). Kroz ta&#269ku \(M\) mo&#382emo povu&#263i samo jednu pravu \(m\), koja je paralelan
     sa ordinatnom osom, i jednu pravu \(n\), koja je paralelana sa apscisnom osom. Prava \(m\) presjeca apcisnu osu u 
     jednoj ta&#269ki, neka je to ta&#269ka koja odgovara broju \(x=3\), a prava \(n\) presjeca ordinatnu osu u ta&#269ki 
     koja odgovara broju \(y=2\). </p>

   <div id = "image">
     <center> <img src = "slike/2.jpg" width = "400" height = "300"/></center>
      
   </div>

     <p id="text">
     Ta&#269ki \(M\) dodijelimo par brojeva 3,2 , koji &#263emo pisati u obliku \((3,2)\). 
     Ovaj par nazivamo ure&#273en. Broj 3 nazivamo prva, a 2 druga koordinata ure&#273enog para \((3,2)\). <br>
     </br>
     Dakle, na ovaj na&#269in mo&#382emo svakoj ta&#269ki \(A\) ravni \(xOy\) pridru&#382iti po jedan i samo jedan ure&#273eni par
     \((x,y)\) realnih brojeva. Vrijedi i obrnuto, svakom ure&#273enom paru \((x,y)\) realnih brojeva mo&#382emo
     pridru&#382iti jednu i samo jednu ta&#269ku \(N\) ravni \(xOy\). <br>
     Brojevi \(x\) i \(y\) nazivaju se koordinatama ta&#269ke \(A\). <br>
     Ta&#269ku \(A\) koja je odre&#273ena ure&#273enim parom \((x,y)\), ozna&#269i&#263emo sa \(A(x,y)\).
   </p>
   
  <input type="button" value="Snimi stranicu" onclick="printpage()" />
 
  </div>

moj zadatak je da napravim funkciju koja ce umjesto da otvori ovaj sadrzaj da isparsira ono sto ja hocu. u ovom slucaju je to sve unutar diva content. e ovo ne radi. zapravo radi ali isparsira mi sve linkove odjednom (ovo je jedan od njih). On i treba da isparsira sve linkove ali tek kad kliknem na njih. Kad kazem da ih isparsira, mislim da u drugom fajlu.php odakle pozivam parser, promijenim sadrzaj nekog drugog diva. npr div = “sredina”. E a ako ukinem sve sto sadrzi navodnike iz ovog gore koda onda sve radi ok

Dakle imam: fajl.php koji poziva parser za fajlove prva.html, druga.html…peta.html. U ovom mom php fajlu imam i nesto html koda, od kojeg je dio

ovo je neki kod u sredini

Treba da se ovaj gore div popunjava sadrzajem iz onih html fajlova kako ja kliknem na koji link. Nadam se da sam objasnio.

A jesi probo ovako:

[quote=adioe3]A jesi probo ovako:

Nisam, ali ne znam jesmo li se razumjeli, problem su navodnici u html fajlu koji parsiram.