Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

XML Parser klasa

[es] :: PHP :: XML Parser klasa

[ Pregleda: 1133 | Odgovora: 5 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bluesman
Goran Pilipović
Beograd

Član broj: 4505
Poruke: 1885
*.185.EUnet.yu.

ICQ: 7987706
Sajt: www.revolution.co.yu


Profil

icon XML Parser klasa25.10.2004. u 12:25

Da li je ima neko da "podeli" neku obicnu klasu za parsovanje XML fajlova koja bi trebala da vrati array struktiran kao XML dokument, zajedno sa svim tagovima i atributima? Nasao sam par ali obicno ignorisu atribute pa su mi beskorisne.
Goran Pilipović fka bluesman
25.10.2004. u 12:25 

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.ftn.ns.ac.yu.

Sajt: www.activecollab.com


Profil

icon Re: XML Parser klasa25.10.2004. u 12:45
Imam ja, ali bi mi trebalo 3 dana da ih "izvučem" iz sistema.

Inače, to su prepađene PEAR klase: XML_Parser i XML_Tree (uključujući XML_TreeNode). Ne bi trebalo da bude veliki problem da ih prilagodiš svojim potrebama pošto od ostalih paketa koriste samo PEAR za error handling.

Izvuci šta ti treba :)

Pozdrav
http://www.activecollab.com - Alat za upravljanje projektima
25.10.2004. u 12:45 

mordor
Vladimir Cvetic
/dev/null

Član broj: 2797
Poruke: 421
*.beotel.net.

Jabber: cvele@default.co.yu
Sajt: www.knowbies.com


Profil

icon Re: XML Parser klasa25.10.2004. u 13:24
Code:

<?php
// classse feedReader
//faz a leitura de um feed (rss ou xml)
//versão 1.0 para PHP 4
//autor: José Valente mailto:josecarlosvalente@sapo.pt
//2004 Portugal

class feedReader{

var $feedReader;   // parser
var $feedUrl;      // url do ficheiro xml/rss
var $node;         // número de nós dos items
var $channelFlag;  // flag
var $currentTag;   // actual tag
var $outputData;   // array dos dados (notícias formatadas)
var $itemFlag;     // flag
var $imageFlag;    // flag

function feedReader(){ //constructor iniciação dos valores por defeitos dos elementos da classe
    $this->feedReader="";
    $this->feedUrl="";
    $this->node=0;
    $this->channelFlag=false;
    $this->currentTag="";
    $this->outputData=array();
    $this->itemFlag=false;
    $this->imageFlag=false;
}

function setFeedUrl($url){ //indicamos o endereço do ficheiro xml/rss
    $this->feedUrl=$url;
}

function getFeedOutputData(){ //retornamos o array com as notícias formatadas
    return $this->outputData;
}

function getFeedNumberOfNodes(){ //retornamos o número de notícias
    return $this->node;
}

function parseFeed(){ //função parse do xml
    $this->feedReader=xml_parser_create();
    xml_set_object($this->feedReader,&$this);
    xml_parser_set_option($this->feedReader,XML_OPTION_CASE_FOLDING,true);
    xml_set_element_handler($this->feedReader,"openTag","closeTag");
    xml_set_character_data_handler($this->feedReader,"dataHandling");
    if(!($fp=@fopen($this->feedUrl,"r"))){
        $errorDefinition="Não foi possível encontrar o ficheiro pretendido.";
        echo $errorDefinition;
    }
    while($data=@fread($fp,4096)){
        if(!@xml_parse($this->feedReader,$data,feof($fp))){
            $errorDefinition=xml_error_string(xml_get_error_code($this->feedReader));
            echo $errorDefinition;
        }
    }
    xml_parser_free($this->feedReader);
}

function openTag($parser,$name,$attrs){ //função startElement
        if($name){
            switch(strtolower($name)){
                case "channel":$this->channelFlag=true;break;
                case "image":$this->channelFlag=false;$this->imageFlag=true;break;
                case "item":$this->channelFlag=false;$this->imageFlag=false;$this->itemFlag=true;$this->node++;break;
                default:$this->currentTag=strtolower($name);break;
            }
        }
}

function closeTag($parser,$name){ //função endElement
    $this->currentTag="";
}

function dataHandling($parser,$data){ //função characterElement
    if($this->channelFlag){ //para a descrição do channel
        switch($this->currentTag){
            case "title":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "link":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "description":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "language":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "copyright":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "docs":$this->outputData["channel"][$this->currentTag]=$data;break;
            case "lastbuilddate":$this->outputData["channel"][$this->currentTag]=$data;break;
        }
    }
    if($this->itemFlag){ //para a descrição dos items
        switch($this->currentTag){
            case "title":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break;
            case "link":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break;
            case "description":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break;
            case "author":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break;
            case "pubdate":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break;
        }
    }
    if($this->imageFlag){ //para a descrição da imagem
        switch($this->currentTag){
            case "title":$this->outputData["image"][$this->currentTag]=$data;break;
            case "url":$this->outputData["image"][$this->currentTag]=$data;break;
            case "link":$this->outputData["image"][$this->currentTag]=$data;break;
        }
    }
}

}
?>


sa phpclasses.org
25.10.2004. u 13:24 

bluesman
Goran Pilipović
Beograd

Član broj: 4505
Poruke: 1885
*.185.EUnet.yu.

ICQ: 7987706
Sajt: www.revolution.co.yu


Profil

icon Re: XML Parser klasa25.10.2004. u 13:52
Tnx, ali ne treba me feed eader - treba mi nesto sto ce da ucita "nepredvidivo" i napravi array koji se struktuiran isto kao XML dokument, ali sa sve atributima.

Mislim da sam nasao nesto slicno, ali cu morati da prepravljam, a to sam bas hteo da izbegnem :-)
Goran Pilipović fka bluesman
25.10.2004. u 13:52 

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 2444
*.nat-pool.bgd.sbb.co.yu.

Jabber: grakic@jabber.org
Sajt: blog.goranrakic.com


Profil

icon Re: XML Parser klasa25.10.2004. u 15:48
ja koristim XML Tree iz PEAR-a, stim sto kada sam ja prvi put to gledao bila je neka nekompatibilnost sa XML Parser-om pa sam morao to da sredjujem. Nadam se da su to sredili sada.
http://sr.openoffice.org — slobodan kancelarijski paket, zamena za MS Office, na srpskom i engleskom, legalno bez troškova licenciranja
25.10.2004. u 15:48 

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.ftn.ns.ac.yu.

Sajt: www.activecollab.com


Profil

icon Re: XML Parser klasa25.10.2004. u 18:54
Vrlo verovatno jesu pošto ja nisam imao problema sa kombinacijom ta dva kada sam ih prilagođavao... Inače, svaki minut uložen u prepravljanje tih klasa mi se isplatio. XML otvara mnoga vrata...
http://www.activecollab.com - Alat za upravljanje projektima
25.10.2004. u 18:54 

[es] :: PHP :: XML Parser klasa

[ Pregleda: 1133 | Odgovora: 5 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.