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

XML Parser klasa

[es] :: PHP :: XML Parser klasa

[ Pregleda: 3053 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bluesman

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



+1 Profil

icon XML Parser klasa25.10.2004. u 12:25 - pre 237 meseci
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
 
Odgovor na temu

Ilija Studen
Novi Sad

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

Sajt: www.activecollab.com


+1 Profil

icon Re: XML Parser klasa25.10.2004. u 12:45 - pre 237 meseci
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
 
Odgovor na temu

mordor
Vladimir Cvetic
/dev/null

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

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


Profil

icon Re: XML Parser klasa25.10.2004. u 13:24 - pre 237 meseci
Code:

<?php
// classse feedReader
//faz a leitura de um feed (rss ou xml)
//versão 1.0 para PHP 4
//autor: José Valente mailto:[email protected]
//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
 
Odgovor na temu

bluesman

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



+1 Profil

icon Re: XML Parser klasa25.10.2004. u 13:52 - pre 237 meseci
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
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: XML Parser klasa25.10.2004. u 15:48 - pre 237 meseci
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.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Ilija Studen
Novi Sad

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

Sajt: www.activecollab.com


+1 Profil

icon Re: XML Parser klasa25.10.2004. u 18:54 - pre 237 meseci
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
 
Odgovor na temu

[es] :: PHP :: XML Parser klasa

[ Pregleda: 3053 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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